【剑指offer】【队列】59-I.滑动窗口的最大值
题目链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/
单调队列
时间复杂度:O(n)
空间复杂度:O(k):双端队列中最多同时存储k个元素,即窗口大小
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> de; //队列中存的是索引
vector<int> res;
for(int i = 0; i < nums.size(); i++)
{
// 判断队头是否滑出窗口 i - k + 1为滑动窗口的开头
if(!de.empty() && i - k + 1 > de.front()) de.pop_front();
// 队尾元素小于等于当前元素时,队尾元素出队
while(!de.empty() && nums[i] >= nums[de.back()]) de.pop_back();
// 当前元素下标入队
de.push_back(i);
//每次都将最大值保存到结果中
//i - k + 1 >= 0的时候才入队
if(i >= k - 1) res.push_back(nums[de.front()]);
}
return res;
}
};
知识的价值不在于占有,而在于使用

浙公网安备 33010602011771号