简单的DP,注意dp的初始值,即最短长度为1(本身)。
①依次遍历前面的数字,查询是否有比目前数字小的
②如果有,就把以这个数字结尾的子序列长度,更新为 max
class Solution {
public int lengthOfLIS(int[] nums) {
int len = nums.length;
if (len <= 1) return len;
int[] dp = new int[len + 1];
Arrays.fill(dp,1);
int result = 1;
for (int i = 1; i < len; i++) {
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);//j严格小于i,所以要+1
}
}
result = Math.max(result, dp[i]);
}
return result;
}
}