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 @   北原春希  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示