题目
最长递增子序列
思路
- 动态规划思想,设dp[i]为以nums[i]为结尾的最长递增子序列的长度。
- dp[i]任何情况下都至少为1,所以dp数组初始化全为1
- 那么递推公式是什么,只要比nums[i]小的数,都满足提议因此,有
dp[i] = Math.max(dp[i], dp[j] + 1);
j从0到i-1 - dp数组的最大值就是所求值
代码
if (nums.length == 0) {return 0;}int[] dp = new int[nums.length];dp[0] = 1;int maxans = 1;for (int i = 1; i < nums.length; i++) {dp[i] = 1;for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}maxans = Math.max(maxans, dp[i]);}return maxans;