题目:
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> result;
if(nums.size()==0) return result;
deque<int> que; //要维护这样一个队列:队列能够自动弹出和压入元素,队列首部到尾部递减。要注意存放的元素是数组的下表。
for(int i=0;i<nums.size();i++){
while(!que.empty()&&nums[que.back()]<=nums[i]){ //要保证队列首部到尾部递减,保证了队列首部是当前(每一个)窗口的最大值
que.pop_back();
}
if(!que.empty()&&i-que.front()+1>k){ //队列最大值不在窗口范围内,弹出。两个!que.empty()都不能省略,避免对空队列进行操作
que.pop_front();
}
que.push_back(i);
if(i>=k-1){ //当遍历元素等于窗口数时开始记录最大值和滑动窗口
result.push_back(nums[que.front()]);
}
}
return result;
}
};
分类:
算法编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具