239、滑動窗口最大值

 


class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {

        vector<int>res;
        //各種情況都得討論,不然下方有用下標,會導致段錯誤
        if(nums.size()==0||k==0||k>nums.size())return res;
        //用雙端隊列來存向量中的索引
        deque<int>record;
        //先初始化雙端隊列,,
        for(int i=0;i<k;i++)
        {
            //比較當前值是否比隊列中存放的後端索引對應的值大,如果大,彈出,直到隊列爲空
            while(record.size()!=0&&nums[i]>nums[record.back()])record.pop_back();
            //當前值比隊列中存放的後端索引對應的值小,或者隊列爲空時,添加
            record.push_back(i);
        }
        
        res.push_back(nums[record.front()]);
        for(int i=k;i<nums.size();i++)
        {
           if(record.size()!=0&&record.front()<=i-k)record.pop_front();
            //比較當前值是否比隊列中存放的後端索引對應的值大,如果大,彈出,直到隊列爲空
           while(record.size()!=0&&nums[i]>nums[record.back()])record.pop_back();
           //當前值比隊列中存放的後端索引對應的值小,或者隊列爲空時,添加
           record.push_back(i);
           
           
           res.push_back(nums[record.front()]);
            
        }

        return res;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章