博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
滑动窗口的最大值
阅读量:6829 次
发布时间:2019-06-26

本文共 1747 字,大约阅读时间需要 5 分钟。

题目描述

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
 
思路:
插入数字 滑动窗口 队列中的下标 最大值
2 2 0(2)  
3 2,3 1(3)  
4 2,3,4 2(4) 4
2 3,4,2 2(4),3(2) 5
6 4,2,6 4(6) 6
2 2,6,2 4(6),5(2) 6
5 6,2,5 4(6),6(5) 6
1 2,5,1 6(5),7(1) 5
每次加入一个新的数字,考察这个值有没有可能成为最大值。
考察的方法就是:看这个队列中有没有比这个小的值,如果有就去掉(去掉队尾元素),因为它是最后进入的,所以它一定会参与最大值评选,保留的时间也会更长。
但是如果队列中没有比这个值更小的,那么也要把它放进去,因为可能前面比它大的,会在滑动过程中删除,所以它可能成为最大值。
所以就是无论如何这个值都会进入队列。
由于滑动窗口,所以还要判断队列的头还在不在滑动窗口中,不在的话要去掉。(去掉队首元素)
这样就可以保证,队列首元素一定是滑动窗口中的最大值。
 
由于要对队列的首尾都进行操作,所以用到双向队列deque
添加到队首:que.push_front();
添加到队尾:que.push_back();
从队首删除:que.pop_front();
从队尾删除:que.pop_back();
我的代码:
vector
maxInWindows(const vector
& num, unsigned int size) { deque
que;//双向队列 vector
res; int lenth = num.size(); if(lenth == 0 || size > lenth ||size <= 0) return res; for(int i = 0; i < size;i++) { while(!que.empty() && num[i] >= num[que.back()]) que.pop_back();//弹出比最后进入的元素小的数 que.push_back(i); } res.push_back(num[que.front()]); for(int i = size;i < lenth;i++) { while(!que.empty() && num[i] >= num[que.back()]) que.pop_back();//弹出比最后进入的元素小的数 if(!que.empty() && que.front() <= i-size) que.pop_front(); que.push_back(i); res.push_back(num[que.front()]); } return res; }

 

转载于:https://www.cnblogs.com/Lune-Qiu/p/9275703.html

你可能感兴趣的文章
Mac OS X 下安装使用 Docker
查看>>
【shiro】org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token
查看>>
java多线程通过管道流实现不同线程之间的通信
查看>>
第十三章 三种非对称加密算法总结
查看>>
WPF 元素的查找
查看>>
报错:ASP.NET Web API中找不到与请求匹配的HTTP资源
查看>>
Linux监控命令 - forever - ITeye技术网站
查看>>
转:自然语言处理(NLP)网上资源整理
查看>>
QT错误笔记-Qt Creator needs a compiler set up to build. Configure a compiler in the kit options.
查看>>
日交易额百亿级交易系统的超轻量日志实现
查看>>
程序员常见的坏习惯,你躺枪了吗?
查看>>
天猫精灵新品魔岩灰,听名字就知道这是装着一颗摇滚心的产品!
查看>>
4岁男童也懂浪漫!六一偷送小女生天价珠宝,妈妈哭笑不得
查看>>
速度与颜值的碰撞,评测荣耀V9的“快”与“美”
查看>>
天猫超级品牌日联手荣耀 天猫开启互联网手机营销下半场
查看>>
五峰山过江通道芒稻河特大桥水中墩承台浇筑完成
查看>>
江苏镇江分级诊疗健康服务体系初步构建
查看>>
花椒六间房“花房之夜”落幕 全新升级不止心动
查看>>
编程史上最杰出的5位程序员,网友:没有一个中国人!
查看>>
分布式中的一致性算法:Paxos和Raft比较
查看>>