题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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<int> maxInWindows(const vector<int>& num, unsigned int size)
 4     {
 5         vector<int> result;
 6         if(num.size() == 0 || size < 1)
 7             return result;
 8         deque<int> qmax;
 9         for(int i=0;i<num.size();i++)
10         {
11             if(qmax.empty())
12             {
13                 qmax.push_back(i);
14             }
15             else
16             {
17                 while(!qmax.empty() && num[qmax.back()] <= num[i])
18                 {
19                     qmax.pop_back();
20                 }
21                 qmax.push_back(i);
22             }
23             if(qmax.front() == i-size)//去除掉超出当前窗口的下标
24             {
25                 qmax.pop_front();
26             }
27             if( i >= size-1)//第一次需要处理w个然后才开始存入最大值res
28             {
29                 result.push_back(num[qmax.front()]);
30             }
31         }
32         return result;
33     }
34 };

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

64、剑指offer--滑动窗口最大值相关推荐

  1. 剑指offer做题记录

    1. 剑指 Offer 03. 数组中重复的数字   力扣 class Solution { public:int findRepeatNumber(vector<int>& nu ...

  2. java 滑动窗口_【Java】 剑指offer(59-1) 滑动窗口的最大值

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如,如果输入数组{2, 3, 4, 2, 6, 2, 5, 1 ...

  3. java queue 最大值_[剑指offer题解]队列的最大值/滑动窗口的最大值

    前言 众所周知,<剑指offer>是一本"好书". 为什么这么说? 因为在技术面试中,它里面罗列的算法题在面试中出现的频率是非常非常高的. 有多高,以我目前不多的面试来 ...

  4. 【LeetCode】剑指 Offer 59 - I. 滑动窗口的最大值

    [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 文章目录 [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 package offer;import ja ...

  5. 【重点】剑指offer——面试题65:滑动窗口的最大值

    剑指offer--面试题65:滑动窗口的最大值 Solution1: 笨蛋方法啊.. class Solution { public:vector<int> maxInWindows(co ...

  6. 【LeetCode】【队列】剑指 Offer 59 - I. 滑动窗口的最大值 思路解析和代码

    剑指 Offer 59 - I. 滑动窗口的最大值 题目链接 个人思路 题意 思路 滑动窗口的原理符合队列先进先出的性质,因此要考虑使用队列 关键要考虑一个问题 如果pop出当前最大值,要如何再次寻找 ...

  7. 【LeetCode笔记】剑指Offer 59. I 滑动窗口的最大值(Java、单调队列)

    文章目录 题目描述 思路 && 代码 1. 暴力法 O(n2n^2n2) && O(1) 2. 单调队列辅助 O(n) && O(n) 二刷 打卡第十天 ...

  8. 剑指offer——面试题64:数据流中的中位数

    剑指offer--面试题64:数据流中的中位数 Solution1: 最笨的方法了... class Solution { public:void Insert(int num) {num_strea ...

  9. LeetCode 剑指Offer 64.求1,2到n的和, 不使用循环/判断及乘除

    题目 剑指 Offer 64. 求1+2+-+n 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: ...

  10. 【LeetCode】剑指 Offer 64. 求1+2+…+n

    [LeetCode]剑指 Offer 64. 求1+2+-+n 文章目录 [LeetCode]剑指 Offer 64. 求1+2+-+n package offer;public class Solu ...

最新文章

  1. 湖南工程学院计算机毕业设计,湖南工程学院毕业设计模板.docx
  2. matlab ssgs工具箱,基于PI控制方式的1A开关电源MATLAB仿真研究
  3. Java类类getComponentType()方法与示例
  4. keil html转换工具,网页转换工具FCARM和makefsfile的使用简介
  5. python3.7安装, 解决pip is configured with locations that require TLS/SSL问题
  6. Google Drive 被曝0day,可诱骗用户安装恶意软件
  7. axure内联框架和动态面板_Axure中内联框架的使用与设置图文教程(第12)
  8. 惠普HP Laser 107a 打印机驱动
  9. 雅型钢五金大全(五金计算器)绿色便携版V20220512 | 实用五金计算软件下载
  10. 斯坦福 计算机 学什么,斯坦福大学本科计算机专业学习哪些课程?
  11. 偏微分方程中常用的不等式
  12. Neural Networks and Deep Learing笔记:一个简单的识别手写数字的神经网络
  13. TTF、TOF、WOFF 和 WOFF2 的相关概念
  14. 二层交换配置完ping失败_交换机堆叠后部分IP地址PING包不可达问题
  15. 布同:使用ghost备份或者还原的往事
  16. 经验分享:兢兢业业工作5年的我不敌半年新人,原来“迪赛智慧数”才是升职加薪的关键!
  17. Java基础--I/O流知识总结
  18. Dubbo2.7.3入门
  19. 在 SCA Module 中使用 Hibernate 框架实现数据持久层
  20. 天梯赛真题L3-008: 喊山(BFS + 数据结构)

热门文章

  1. iOS开发之将base64位编码的字符串转换为图片,data转图片,图片转data
  2. macOS Big Sur系统Parallels Desktop无法启动的解决办法
  3. 统一对外的接口,支持requestBody以及表单提交的坑
  4. Spring Data Jpa 查询返回自定义对象
  5. 20151026作业
  6. android中的通信机制总结
  7. Apache2.2整合PHP5.2
  8. Shell 基本语法
  9. 2010.6.20 OA项目组一周工作报告
  10. 牛逼!Intellij IDEA竟然有个功能可自动生成代码,你用过没?