1. 程式人生 > 實用技巧 >劍指 Offer 59 - I. 滑動視窗的最大值

劍指 Offer 59 - I. 滑動視窗的最大值

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
       if(nums.size()==0) return {};
       deque<int>deqmax;
       vector<int>res;
       //首先第一個視窗開始進隊
       for( int i=0;i<nums.size();i++ )
       {
           //向右擴一個
           //如果佇列一開始不為空且存的下標所指的值比要入隊的數小,就迴圈出隊
           while( !deqmax.empty()&& nums[deqmax.back()]<=nums[i] )
           {
               deqmax.pop_back();
           }
           deqmax.push_back( i );
           //向左縮一個
           //如果這個值需要更新(頭的下標就是需要縮的那個下標的話)那麼就出隊
           if( deqmax.front()==i-k )
           {
              deqmax.pop_front();
           }

           //把視窗最大值記錄
           if( i>=k-1 )
           {
               res.push_back( nums[deqmax.front()] );
           }
       }
       return res;
    }
};