[dp]leetcode674:最長連續遞增子序列(easy)

題目:
在這裏插入圖片描述
題解:

  • 題解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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章