300. 最长递增子序列 (动态规划 ,状态获取条件不同)
rt :
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
s:
该dp数组表示当前长度下最大的递增序列长度,那么dp[i]的取值,就要与0-i任意一个有关,因此递推dp[i]的时候需要遍历0-i,选取最大的给dp[i]
class Solution { public: int lengthOfLIS(vector<int>& nums) { if (nums.size() <= 1) return nums.size(); vector<int> dp(nums.size(), 1); int result = 0; for (int i = 1; i < nums.size(); i++) { for (int j = 0; j < i; j++) { if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1); result = max(result, dp[i]); } } return result; } };