动态规划
算法思路
dp数组的含义,dp[i]表示,以nums[i]结尾的最长递增序列,的长度。- 使用两层
for循环,第一层遍历nums中的每个数nums[i],第二层遍历nums[i]前面的每个数nums[j],考察每个nums[j] < nums[i],找出最大的dp[j] + 1,也就是前面以nums[j]结尾的最长序列,然后把nums[i]接在序列后面。
class Solution {
public int lengthOfLIS(int[] nums) {
int n = nums.length;
if (n == 1) {
return 1;
}
int[] dp = new int[n];
Arrays.fill(dp, 1);
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
int res = 1;
for (int i = 0; i < n; i++) {
if (dp[i] > res) {
res = dp[i];
}
}
return res;
}
}