diff --git a/test011.cpp b/test011.cpp index 10e6c72..efae9fe 100644 --- a/test011.cpp +++ b/test011.cpp @@ -1,4 +1,4 @@ -// 1.优先队列 +// 方法一、优先队列 class Solution { public: vector maxSlidingWindow(vector& nums, int k) { @@ -19,4 +19,30 @@ public: } }; -// \ No newline at end of file +// 方法二、单调队列 +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; + } +}; \ No newline at end of file