LeetCode 滑动窗口最大值
题目链接:https://leetcode-cn.com/problems/sliding-window-maximum/
题目大意
略。
分析
可以用双端队列来维护窗口内最大值。
双端队列队首存窗口内最大值下标,双端队列内部下标单调递增,所对应值单调不增。
代码如下
1 class Solution { 2 public: 3 vector<int> maxSlidingWindow(vector<int>& nums, int k) { 4 vector< int > ans; 5 deque< int > DQ; 6 7 if(nums.empty()) return ans; 8 for(int i = 0; i <= k - 1; ++i) { 9 while(!DQ.empty() && nums[i] > nums[DQ.back()]) DQ.pop_back(); 10 DQ.push_back(i); 11 } 12 13 ans.push_back(nums[DQ.front()]); 14 for(int i = k; i < (int)nums.size(); ++i) { 15 if(i - k == DQ.front()) DQ.pop_front(); 16 while(!DQ.empty() && nums[i] > nums[DQ.back()]) DQ.pop_back(); 17 DQ.push_back(i); 18 ans.push_back(nums[DQ.front()]); 19 } 20 21 return ans; 22 } 23 };