leetcode239_滑動窗口最大值

1. 運用滑動窗口模板解題, 具體可以看滑動窗口總結這篇.

2. 但是我們需要注意每次類似維護一個單調遞減棧,這樣front就是最大值,然後移除之後,下一個就是下一個窗口的最大值.

3. 遇到大於back值的,就循環將最大值移動到相應的位置, 這裏用雙端隊列deque實現這個功能.

class Solution {
public:
	vector<int> maxSlidingWindow(vector<int>& nums, int k) {
		vector<int> res;
        //邊界條件
        if(nums.size()==0 || k<1 || nums.size()<k) return res;
        int left=0, right=0;
        deque<int> tmp;
        //先移動右指針.
        while(right<nums.size()) {
            //循環移動最大值到最前面.
            while(!tmp.empty() && nums[right]>tmp.back()) {
                tmp.pop_back();   
            }
            tmp.push_back(nums[right]);
            right++;
            //窗口大小符合要求.
            while(right-left==k) {
                res.push_back(tmp.front());
                if(nums[left]==tmp.front()) tmp.pop_front();
                left++;
            }
        }
        return res;
	}
};

 

發佈了95 篇原創文章 · 獲贊 26 · 訪問量 2117
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章