题目描述
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
解答
只有当 nums[i]>nums[j] 时:
nums[i]可以接在nums[j] 之后(此题要求严格递增),此情况下最长上升子序列长度为 dp[j] + 1dp[j]+1 ;
那么可以得到状态转移方程:
dp[i] = max(dp[i], dp[j] + 1) for j in [0, i)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if(nums.size() <= 0)
return 0;
vector<int> lengths(nums.size(),1);
for(int i = 0; i < nums.size(); i++)
{
for(int j = 0; j < i; j++)
{
if(nums[i] > nums[j])
lengths[i] = max(lengths[j] + 1,lengths[i]);
}
}
int max_len = *max_element(lengths.begin(), lengths.end());//返回最大值
return max_len;
}
};