题目描述
题目链接: 300. 最长递增子序列.
题解
动态规划
- dp数组的含义:以当前数字为结尾的最长递增子序列的长度
- dp初始化:每一个数字最小都为1,所以都初始化为1即可
- 递推公式:每次遇到一个数字num[i]时,要遍历前面的数字,如果当前数字nums[i]比前面的数字nums[j]大的话,那么dp[i] = Math.max(dp[i], dp[j] + 1)
- 每次算出dp,更新res
class Solution {
public int lengthOfLIS(int[] nums) {
int res = 0;
int[] dp = new int[nums.length];
for (int i = 0; i < nums.length; i++){
dp[i] = 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);
}
}
res = Math.max(dp[i], res);
}
return res;
}
}