C++——单调队列
class Solution {
public:
class Myqueue // 单调队列
{
public:
deque<int>que;
// 因为只维护了队列最大值,故在pop时判断滑动窗口最前方的值与最大值是否相等,相等则pop
// 这样就保持了队列里的数值是单调从大到小的了。
void pop(int value)
{
if(!que.empty() && value == que.front())
{
que.pop_front();
}
}
// 如果push的数值大于入口元素的数值,那么就将队列后端的数值弹出,直到push的数值小于等于队列入口元素的数值为止。
// 这样就保持了队列里的数值是单调从大到小的了。
void push(int value)
{
while(!que.empty() && value > que.back())
{
que.pop_back();
}
que.push_back(value);
}
// 查询当前队列里最大值
int front()
{
return que.front();
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
Myqueue que;
vector<int>result;
for(int i = 0; i < k; i++) // 将前k个元素放进队列中
{
que.push(nums[i]);
}
result.push_back(que.front());
for(int i = k; i < nums.size(); i++)
{
que.pop(nums[i - k]);
que.push(nums[i]);
result.push_back(que.front()); // 记录对应的最大值
}
return result;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)