最长递增子序列
最长递增子序列
题目
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
示例
![]() |
|---|
解题思路
- 分析题目严格递增子序列,删除数组中的元素而不改变其余元素的顺序。
- 我们可以通过动态规划,dp[i]表示在位置i前方严格递增元素个数。
- 推出动态方程为:
if(nums[i] >num[k] )
dp[i] = max(dp[i], dp[k]+1);
- 编写代码,进行数据验证。
解题代码
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
int result = 1;
vector<int> dp(n, 1);
for(int i = 0; i < n; i++){
for(int k = 0; k < i; k++){
if(nums[k] < nums[i]){
dp[i] = max(dp[k]+1, dp[i]);
result = max(dp[i], result);
}
}
}
return result;
}
};


浙公网安备 33010602011771号