码迷,mamicode.com
首页 > 其他好文 > 详细

滑动窗口

时间:2019-09-02 09:38:40      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:判断   color   amp   push   第一个   ons   return   col   结果   

 1 class Solution{
 2  public:
 3     vector<int> maxInWindows(const vector<int> &nums,unsigned int size){
 4         vector<int> res;
 5         if(nums.empty() || size <= 0)
 6             return res;
 7         
 8         //滑动窗口  用一个双端队列来记录窗口的最大值
 9         /*
10         判断逻辑
11         队列是空 直接加入
12         队列不为空  和对尾元素进行比较   如果比队尾元素小  加到队尾
13                                     如果比队尾元素大  队尾元素一直弹出 直到大于插入元素
14         需要注意的点:
15         1.队首元素的过期 去除问题  q.front() == i-w  比如三个元素 窗口大小是2
16         如果此时队首是第一个元素 也就是0   遍历到第三个元素的时候 index是2  就需要弹出队首
17         2.拿出队首加到结果集中 什么时候开始需要记录   n个元素  最多有n-w+1个窗口 因此i>= w-1
18         */
19         deque<int> d;
20         for(int i = 0;i<nums.size();i++){
21             while(!d.empty() && nums[d.back()] <= nums[i])
22                 d.pop_back();
23             d.push_back(i);
24             if(d.front() == i-size)
25                 d.pop_front();
26             if(i >= size-1)
27                 res.push_back(nums[d.front()]);
28         }
29         
30         return res;
31     }
32     
33 };

 

滑动窗口

标签:判断   color   amp   push   第一个   ons   return   col   结果   

原文地址:https://www.cnblogs.com/znshao/p/11444469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!