题目描述:
解题思路:
威哥的题解
dp[i]中存放以nums[i]结尾的最长上升子序列的长度,遍历到i的时候,将i前面的遍历一遍,如果出现比nums[i]小的数,那么可以直接将nums[i]对应的dp[i]+1当成当前的dp[i],也就是把新的nums[i]接到子序列后。在下标 i 之前严格小于 nums[i] 的所有状态值中的最大者 + 1+1 如果不懂可以去看力扣ppt的动图演示。最后在遍历一遍dp,返回最大值即可。
这道题还有很多优化的地方,以后再补。
参考代码:
public int lengthOfLIS(int[] nums) {
if(nums.length<2)
{
return nums.length;
}
int max=1;
int[] dp=new int[nums.length];
Arrays.fill(dp,1);
for (int i = 1; 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);
}
}
max=Math.max(dp[i],max);
}
return max;
}