剑指 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;
    }
};

  

posted @ 2020-08-16 12:07  肉松松松松  阅读(70)  评论(0)    收藏  举报