題目:
題解:
- 題解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;
}
};