题目:
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.pop_front();
}
que.push_back(i);
if(i>=k-1){ //当遍历元素等于窗口数时开始记录最大值和滑动窗口
result.push_back(nums[que.front()]);
}
}
return result;
}
};
标签:59,Offer,队列,最大值,nums,que,result,窗口
From: https://www.cnblogs.com/fly-smart/p/17588944.html