[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;
    }
};
发布了512 篇原创文章 · 获赞 175 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/104103446
今日推荐