leetcode滑动窗口(239题)

820阅读 0评论2021-03-20 stolennnxb
分类:C/C++

单调队列,保证当前队列的头元素是最大的(后面的可以<=当前的头元素),移除窗口元素时,比较是否跟队列头相等即可

点击(此处)折叠或打开

  1. vector<int> maxSlidingWindow(vector<int>& nums, int k){
  2.     vector<int> res;
  3.     deque<int> q;
  4.     int len = nums.size();
  5.     if(len ==0) return res;
  6.     for(int i=0;i<len;++i){
  7.         for(;i>0&&q.size()>0&&nums[i]>q.back();) q.pop_back();
  8.         q.push_back(nums[i]);
  9.         if(i>=k &&nums[i-k]==q.front()) q.pop_front();
  10.         if(i >=k-1) res.push_back(q.front());
  11.     }
  12.     return res;
  13. }

上一篇:c++构造当中的一些坑
下一篇:leetcode456, 查找123模式