leetcode 674. Longest Continuous Increasing Subsequence

目录

题目描述

第一步,明确并理解dp数组及下标的含义

第二步,分析明确并理解递推公式

第三步,理解dp数组如何初始化

第四步,理解遍历顺序

代码


题目描述

这是动态规划解决子序列问题的例子。与第300题的唯一区别就是,本题要求子序列是连续的。

第一步,明确并理解dp数组及下标的含义

int n = nums.size();

//nums0,i表示从第0个数一直到第i个数(包含第i个数)的子数组,dpi表示子数组nums0,i中的最长连续递增子序列的长度。

vector<int> dp(n,1);//所有的dpi都初始化为1,含义是numsi这一个数自身一定是一个子序列

第二步,分析明确并理解递推公式

给定i,只需要考虑numsi和numsi-1的大小关系。

if(numsi>numsi-1)

dpi = dpi-1 +1;

else

dpi = 1;

第三步,理解dp数组如何初始化

vector<int> dp(n,1);//所有的dpi都初始化为1,含义是numsi这一个数自身一定是一个子序列

第四步,理解遍历顺序

dpi依赖于dpi-1,所以对i的遍历应该从小到大。

代码

cpp 复制代码
class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int n = nums.size();
        //nums[0,i]表示从第0个数一直到第i个数(包含第i个数)的子数组,dp[i]表示子数组nums[0,i]中的最长连续递增子序列的长度。
        vector<int> dp(n,1);//所有的dp[i]都初始化为1,含义是nums[i]这一个数自身一定是一个子序列
        int res = dp[0];
        for(int i = 1;i < n;i++){
            if(nums[i]>nums[i-1])
                dp[i] = dp[i-1] +1;
            else
                dp[i] = 1;
            if(dp[i] > res)
                res = dp[i];
        }
        return res;
    }
};

可以发现,求dpi时候,只需要知道dpi-1即可,i-1之前的不再需要。因此可以不用数组,改用两个变量。

cpp 复制代码
class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int n = nums.size();
        int dp_i_1 = 1;
        int dp_i = 1;
        int res = dp_i_1;
        for(int i = 1;i < n;i++){
            if(nums[i]>nums[i-1])
                dp_i = dp_i_1 +1;
            else
                dp_i = 1;
            if(dp_i > res)
                res = dp_i;
            dp_i_1 = dp_i;
        }
        return res;
    }
};
相关推荐
Tairitsu_H3 小时前
[LC优选算法#17] 链表 | 合并 K 个升序链表 | K个⼀组翻转链表
数据结构·算法·链表
_olone3 小时前
Luogu P2704 [NOI2001] 炮兵阵地
c++·算法·状压dp
kebidaixu4 小时前
两轮BMS 防打火策略详解
算法
wabs6665 小时前
关于动态规划【力扣1035.不相交的线和53.最大子数组和的思考】
算法·leetcode·动态规划
退休倒计时5 小时前
【每日一题】LeetCode 199. 二叉树的右视图 TypeScript
算法·leetcode·typescript
可编程芯片开发5 小时前
通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器
算法
小O的算法实验室5 小时前
2026年ESWA,基于全局进化动态规划与局部粒子群优化GPU 支持去中心化多机器人路径规划
动态规划
kebidaixu5 小时前
两轮BMS 短路保护策略详解
算法
zwenqiyu5 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
z小猫不吃鱼6 小时前
03 Optimal Brain Surgeon 详解:Hessian 剪枝为什么有效?
算法·机器学习·剪枝