面试题59-1:滑动窗口的最大值
文章目录
题目
给定一个数组 nums
和滑动窗口的大小 k
,请找出所有滑动窗口里的最大值。
考点
双端队列deque,
滑动窗口,
保存下标而不是保存值
LeetCode版本
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> res;
if(nums.empty() || k == 0)return res;
deque<int> deq;
for(int i = 0 ; i < k; i++){
while(!deq.empty() && nums[i] > nums[deq.back()]) deq.pop_back();
deq.push_back(i);
}
res.push_back(nums[deq.front()]);
for(int i = k; i < nums.size(); i ++){
if(deq.front() == i-k) deq.pop_front();
while(!deq.empty() && nums[i] > nums[deq.back()]) deq.pop_back();
deq.push_back(i);
res.push_back(nums[deq.front()]);
}
return res;
}
};