力扣 1425带限制的子序列和

这是一道 动态规划加单调队列的题,重点加强单调队列知识的学习

回归本题,这个题中,动态规划的部分略去,状态转移方程可求

单调队列部分

1维护队头 if(i-sta.front() == k) sta.pop_front();

2维护队尾

while(!sta.empty() &&dp[sta.back()] <dp[i]) sta.pop_back();

sta.push_back(i);

3计算过程,动态规划

dp[i] = max(dp[sta.front()]+nums[i],nums[i]);

ans = max(ans,dp[i]);

复制代码
/*
 * @lc app=leetcode.cn id=1425 lang=cpp
 *
 * [1425] 带限制的子序列和
 */

// @lc code=start
class Solution {
public:
    int constrainedSubsetSum(vector<int>& nums, int k) {
        vector<int> dp(nums.size(),0);
        dp[0] = nums[0];
        int ans = dp[0];
        deque<int> sta;
        sta.push_back(0);
        for(int i = 1;i<nums.size();i++)
        {
            dp[i] = max(dp[sta.front()]+nums[i],nums[i]);
            ans = max(ans,dp[i]);
            if(i-sta.front() == k) sta.pop_front();
            while(!sta.empty() &&dp[sta.back()] <dp[i]) sta.pop_back();
            sta.push_back(i);
        }
        return ans;
    }
};
// @lc code=end
相关推荐
A_nanda2 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
代码雕刻家4 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov4 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业5 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德6 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
diediedei6 小时前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI6 小时前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz12076 小时前
分治算法(c++)
c++·算法
睡一觉就好了。7 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
Tansmjs7 小时前
C++编译期数据结构
开发语言·c++·算法