674. 最长连续递增序列

✅做题思路or感想

暴力解法

“连续”,“递增”要素过多,一眼暴力

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int result = 1, sum = 1;
        for (int i = 1; i < nums.size(); i++) {
            //递增,则当前记录 + 1
            if (nums[i] > nums[i - 1]) {
                sum++;
            } else {	//如果不递增了,则重置当前记录,更新最长长度的记录
                result = max(result, sum);
                sum = 1;
            }
        }
        result = max(result, sum);
        return result;
    }
};

动态规划

dp数组含义

dp[i],以nums[i]结尾的最长连续递增子序列的长度

推导公式

nums[i] > nums[j] 时: nums[i]可以接在nums[j] 之后(此题要求严格递增),此情况下最长上升子序列长度为dp[j] + 1

if (nums[i] > nums[j]) {
    dp[i] = dp[i - 1] + 1;
}

初始化

因为最少的子序列的长度为1,所以一律初始化为1就好了

遍历顺序

从小推大,所以是正序

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        vector<int>dp (nums.size(), 1);
        //result来记录最大的长度
        int result = 1;
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] > nums[i - 1]) {
                dp[i] = dp[i - 1] + 1;
                result = max(result, dp[i]);
            }
        }
        return result;
    }
};
posted @ 2022-04-07 16:15  北原春希  阅读(41)  评论(0编辑  收藏  举报