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

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

题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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]}。
 
解题思路:本题使用双端队列来处理,双端队列实现窗口的更新。
插入规则(保证队头对应值最大):
1)为空时,下标i放入qmax中
2)不为空,取当前qmax队尾下标j,如果arr[j]>arr[i]将i放入队尾,否则,则一直qmax中弹出队尾,直到某一下标使得qmax中对应值arr[j]>arr[i],将i放入队尾。
弹出规则:
1)qmax队头下标等于i-w,弹出队头(已出窗口)
1 class Solution { 2 public: 3     vector
maxInWindows(const vector
& num, unsigned int size) 4 { 5 vector
result; 6 if(num.size() == 0 || size < 1) 7 return result; 8 deque
qmax; 9 for(int i=0;i
= size-1)//第一次需要处理w个然后才开始存入最大值res28 {29 result.push_back(num[qmax.front()]);30 }31 }32 return result;33 }34 };

 

转载于:https://www.cnblogs.com/qqky/p/7125974.html

你可能感兴趣的文章
魔戒三曲,黑暗散去;人皇加冕,光明归来
查看>>
Error和Exception
查看>>
Python和Singleton (单件)模式[转载]
查看>>
hibernate多对多单向(双向)关系映射
查看>>
二分查找题
查看>>
httpclient设置proxy与proxyselector
查看>>
IT常用单词
查看>>
拓扑排序
查看>>
NYOJ--32--SEARCH--组合数
查看>>
JMS
查看>>
gulpfile 压缩模板
查看>>
【34.14%】【BZOJ 3110】 [Zjoi2013]K大数查询
查看>>
【 henuacm2016级暑期训练-动态规划专题 A 】Cards
查看>>
第五篇:白话tornado源码之褪去模板的外衣
查看>>
设备常用框架framework
查看>>
bootstrap模态框和select2合用时input无法获取焦点(转)
查看>>
pdo
查看>>
21世纪经济网APP
查看>>
解决NetworkOnMainThreadException
查看>>
1039 到底买不买
查看>>