使用deque存数组的索引值,保证deque中元素是降序的,即每次取front就能取到最大元素。
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> win;
vector<int> res;
if(nums.size() < k || k == 0) return res;
for(int i=0; i<k; ++i) {
while(win.size() > 0 && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
}
for(int i=k; i<nums.size(); ++i) {
res.push_back(nums[win.front()]);
while (win.empty() != true && i-win.front() >= k) {
win.pop_front();
}
while(win.size() > 0 && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
}
res.push_back(nums[win.front()]);
return res;
}
};