动态规划五部曲:
1、确定dp数组及其下标含义
dp[i]:意为从nums[0]到nums[i]的连续递增子序列的长度 包含nums[i] 但不一定包含nums[0]
2、确定递推式
if(nums[i]>nums[i-1]) dp[i] = dp[i-1]
3、初始化
全部初始化为1
4、遍历顺序
从前往后
5、举例推导dp数组
[1,3,5,4,7]
dp数组:
1 2 3 1 2
题解:
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
//dp[i]:意为从nums[0]到nums[i]的连续递增子序列的长度 包含nums[i] 但不一定包含nums[0]
//递推式:if(nums[i]>nums[i-1]) dp[i] = dp[i-1]
//考虑长度为0和1
if(nums.size() <=1){
return nums.size();
}
//定义dp数组 初始化
vector<int> dp(nums.size(),1);
//结果
int maxNum = 0;
//计算dp数组
for(int i = 1;i<nums.size();i++){
if(nums[i]>nums[i-1]){
dp[i] = dp[i-1]+1;
}
//记录最大值
if(maxNum<dp[i]){
maxNum = dp[i];
}
// cout<<dp[i]<<" ";
}
//返回结果
return maxNum;
}
};