// 方法一、优先队列 class Solution { public: vector maxSlidingWindow(vector& nums, int k) { int n = nums.size(); priority_queue> q; for(int i = 0; i < k; i++){ q.emplace(nums[i], i); } vector ans = {q.top().first}; for(int i = k; i < n; i++){ q.emplace(nums[i], i); while(q.top().second <= (i - k)){ q.pop(); } ans.push_back(q.top().first); } return ans; } }; // 方法二、单调队列 class Solution { public: vector maxSlidingWindow(vector& nums, int k) { int n = nums.size(); deque q; vector ans; for(int i = 0; i < k; i++){ while(!q.empty() && nums[i] >= nums[q.back()]){ q.pop_back(); } q.push_back(i); } ans.push_back(nums[q.front()]); for(int i = k; i < n; i++){ while(!q.empty() && nums[i] >= nums[q.back()]){ q.pop_back(); } q.push_back(i); while(q.front() <= i - k){ q.pop_front(); } ans.push_back(nums[q.front()]); } return ans; } };