注意:子序列是可以不连续的
思路:动态规划,:定义 dp[i] 表示以 nums[i] 这个数结尾的最⻓递增⼦序列的长度。
dp[i] = Math.max(dp[i], dp[j] + 1) dp[i]应该是nums[i]结尾的长度和以nums[j]结尾的长度+1取最大值
初始化:dp 数组应该全部初始化为 1,因为子序列最少也要包含自己,所以长度最小为 1。
class Solution {
public int lengthOfLIS(int[] nums) {
int len = nums.length;
if(len < 2) return len;
int[] dp = new int[len];
// 初始化为1
Arrays.fill(dp, 1);
for(int i = 1; i < len; i++){
for(int j = 0; j < i; j++){
if(nums[j] < nums[i]){
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
int res = 0;
for(int i = 0; i < len; i++){
res = Math.max(res, dp[i]);
}
return res;
}
}