题目:
题解:
- 题解1:动态规划,dp[i]表示位置i的连续递增子序列长度,初始化为1,因为每个数字是最小的递增子序列。状态转移方程:若nums[i-1]<nums[i],则dp[i]=dp[i-1]+1;否则dp[i]=1。
- 题解2:暴力法,暴力统计每段连续子序列的长度。
代码如下:
class Solution {
public:
//题解:动态规划,本题求的是最长连续递增序列,不是递增子序列
//dp[i]表示位置i的连续递增子序列长度,初始化为1,因为每个数字是最小的递增子序列
//状态转移方程:若nums[i-1]<nums[i],则dp[i]=dp[i-1]+1;否则dp[i]=1
int findLengthOfLCIS_1(vector<int>& nums) {
if(nums.empty())return 0;
int res=1,n=nums.size();
vector<int> dp(n,1);
for(int i=1;i<n;++i){
if(nums[i]>nums[i-1])dp[i]=dp[i-1]+1;
res=max(res,dp[i]);
}
return res;
}
//题解2:暴力法
int findLengthOfLCIS(vector<int>& nums){
if(nums.size()<2)return nums.size();
//res表示最长连续递增序列的长度,cnt用来统计局部的连续子序列长度
//二者初始化均为1,因为单个数字就是最小的递增子序列
int res=1,cnt=1,n=nums.size();
for(int i=1;i<n;++i){
if(nums[i-1]<nums[i])cnt++;
else cnt=1;
res=max(res,cnt);
}
return res;
}
};