*原题连接:*https://leetcode-cn.com/problems/longest-increasing-subsequence/
题目描述:
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
- 定义dp数组含义:定义dp[i]为以nums[i]结尾的最长递增子序列
- 确定 base case:dp[i]=1,即最短的递增子序列就自己本身一个
- 转移方程:dp[i]=max(dp[i],dp[j]+1) 0<j<i;(也即是从dp[0~i-1] 推出dp[i]
代码
int lengthOfLIS(vector<int>& nums) {
int len=nums.size();
if(len==0)return 0;
if(len==1)return 1;
int ans=-1;
int dp[len];
for(int i=0;i<len;++i){
dp[i]=1;
}
for(int i=1;i<len;++i){
for(int j=0;j<i;++j){
if(nums[i]>nums[j]){
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(dp[i],ans);
}
return ans;
}