def length_of_lis(nums):
dp=[1]*len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[j]<nums[i]: dp[i]=max(dp[i],dp[j]+1)
return max(dp)
public int lengthOfLIS(int[] nums){
int[] dp=new int[nums.length]; Arrays.fill(dp,1); int res=1;
for(int i=0;i<nums.length;i++)
for(int j=0;j<i;j++)
if(nums[j]<nums[i]) dp[i]=Math.max(dp[i],dp[j]+1);
for(int x:dp) res=Math.max(res,x);
return res;
}
[1]*n vs Arrays.fill(). Python max(dp) vs Java explicit loop.
def length_of_lis(nums):
dp=[1]*len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[j]<nums[i]: dp[i]=max(dp[i],dp[j]+1)
return max(dp)
public int lengthOfLIS(int[] nums){
int[] dp=new int[nums.length]; Arrays.fill(dp,1); int res=1;
for(int i=0;i<nums.length;i++)
for(int j=0;j<i;j++)
if(nums[j]<nums[i]) dp[i]=Math.max(dp[i],dp[j]+1);
for(int x:dp) res=Math.max(res,x);
return res;
}
1. dp[i] = LIS ending at i 2. Check all j<i 3. Return max