首页 > 其他 > 详细

154. 滑动窗口

时间:2020-09-25 22:05:22      阅读:59      评论:0      收藏:0      [点我收藏+]

找长度为k的窗口中的最大值(单调减队列),最小值(单调增队列)

#include<iostream>
using namespace std;

const int N = 1000010;

int n, k;
int a[N];
int q[N], hh = -1, tt = 0;

int main(){
   cin >> n >> k;
   
   for(int i = 0; i < n; i ++) cin >> a[i];
   
   for(int i = 0; i < n; i ++){
       while(hh <= tt && q[hh] < i - k + 1) hh ++;
       while(hh <= tt && a[q[tt]] >= a[i]) tt --;
       q[++ tt] = i;
       if(i >= k - 1) cout << a[q[hh]] << ‘ ‘;
   }
   
   hh = 0, tt = -1;
   
   cout << endl;
   
    for(int i = 0; i < n; i ++){
       while(hh <= tt && q[hh] < i - k + 1) hh ++;
       while(hh <= tt && a[q[tt]] <= a[i]) tt --;
       q[++ tt] = i;
       if(i >= k - 1) cout << a[q[hh]] << ‘ ‘;
   }

   return 0;
}

154. 滑动窗口

原文:https://www.cnblogs.com/tomori/p/13732463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!