滑动窗口最大值

给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧.
你只可以看到在滑动窗口内的k个数字.滑动窗口每次只向右移动一位
返回滑动窗口中的最大值

使用双端队列具体的思路是:

  • 在优先队列的滑动窗口中维护一个从大到小的排序
  • 只要进来的元素比你大 队列里比它小的全走人 这样的话 每回对头就是最大元素
  • 之后移动滑动窗口的左边界的时候 判断是不是对头元素即可 是对头的话 对头就要出去了
public class Solution055 {public static void main(String[] args) {int[] nums = new int[]{1, 3, -1, -3, 5, 3, 6, 7};int[] window = maxSlidingWindow(nums, 3);for (int i : window) {System.out.print(i + " ");}}//使用双端队列 具体的思路是:在优先队列的滑动窗口中维护一个从大到小的排序//只要进来的元素比你大 队列里比它小的全走人 这样的话 每回对头就是最大元素//之后移动滑动窗口的左边界的时候 判断是不是对头元素即可 是对头的话 对头就要出去了public static int[] maxSlidingWindow(int[] nums, int k) {if (nums.length == 0 || k == 0) return new int[]{nums[0]};int len = nums.length - 1;int[] ans = new int[nums.length - k + 1];Deque<Integer> deque = new LinkedList<>();//保证队列中都是大元素 而且是从大到小排列的for (int i = 0; i < k; i++) {while (!deque.isEmpty() && deque.peekLast() < nums[i]) {//队列尾部元素小于当前元素 就出去deque.pollLast();}deque.offerLast(nums[i]);}ans[0] = deque.peekFirst();for (int i = k; i <= len; i++) {//更新左边界if (nums[i - k] == deque.peekFirst()) {deque.pollFirst();}while (!deque.isEmpty() && deque.peekLast() < nums[i]) {//队列尾部元素小于当前元素 就出去deque.pollLast();}//右边界deque.offerLast(nums[i]);ans[i - k + 1] = deque.peekFirst();}return ans;}}

CodeTop055 滑动窗口最大值相关推荐

  1. 嗯,查询滑动窗口最大值的这4种方法不错....

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 Github<小白学算法>系列:https://gith ...

  2. 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)

    [LeetCode][HOT]239. 滑动窗口最大值 文章目录 [LeetCode][HOT]239. 滑动窗口最大值 package hot;import java.util.Arrays; im ...

  3. 滑动窗口最大值的golang实现

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值 输入: nums = [1 ...

  4. 你还在为查询滑动窗口最大值发愁吗?点开看最高效率解法!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 头图 |  CSDN 下载自东方IC 本文已收录至 Github<小白学算法>系列:https://github.c ...

  5. Suzy找到实习了吗Day 13 | 栈和队列结束啦 239. 滑动窗口最大值,347. 前 K 个高频元素

    day 13 239. 滑动窗口最大值 Python的Deque模块详解 solution 我复制的,好难不会写 347. 前 K 个高频元素(一刷我没有用栈,用的哈希法) solution(hash ...

  6. 单调区间之239.滑动窗口最大值

    单调区间 239. 滑动窗口最大值 这个题如果用普通的优先队列是有问题的,因为每次弹出去的不知道是上一个窗口的左边界还是这个窗口里的元素.我们要的是每次只弹出上一个窗口的左边界并且还能弹出最值,所以这 ...

  7. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)

    目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...

  8. 栈和队列6:滑动窗口最大值

    问题描述: 题目链接: 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. ...

  9. 直播视频网站源码,滑动窗口最大值

    直播视频网站源码,滑动窗口最大值的相关代码 class Solution { public:vector<int> maxSlidingWindow(vector<int>&a ...

最新文章

  1. 压力测试工具Ab简介
  2. 按装oracle后 eclips提示jvm版本太低的问题
  3. linux 编写脚本示范,Linux-scripts-简单脚本和脚本的执行
  4. 12306订票助手java_12306订票助手
  5. python 如何运行程序
  6. 数学建模清风微信公众号的习题答案(基础篇-操作题)
  7. 如何用wps画三线图(最方便最快的方法)
  8. 揭秘史上最烂开发项目:苦撑12年,600万+行代码!
  9. Stochastic Weight Averaging (SWA) 随机权重平均
  10. ModelSim illegal reference to net “***“ 报错问题解决
  11. asp毕业设计——基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码)——新闻发布系统
  12. 知识转移策略的跨域故障诊断
  13. 互联网告别免费时代,准备好了吗?
  14. python实现 空间前方交会
  15. 《SystemUI》修改SystemUI锁屏界面时间格式
  16. 加减乘除计算机英语,英语口语:加减乘除的英语怎么说?
  17. 快报:工信部通报38款侵害用户权益的APP | 俄罗斯对保加利亚发起网络攻击
  18. 南京廖华计算机二级考试答案,计算机二级考试MS Office考试题库ppt 操作题附答案...
  19. 关于阿里云服务器迁移的记录
  20. MySQL中的关键字用法(二)

热门文章

  1. 计算机英语求职简历模板,计算机专业英文简历模板
  2. POJ2987-Firing
  3. 11月书讯(上)| 这些好书必须“买买买”!
  4. vue3的setup语法糖和props和emit
  5. 格式化U盘丢失重要照片,未备份情况下该怎么办?2种方案协助您找回宝贵照片!
  6. JavaScript前端CRUD
  7. iOS 判断屏幕方向锁定是否开启
  8. 用于ARM和Debian的ROS Docker镜像
  9. 拿python生成朋友圈九宫格视频
  10. oracle 执行删除索引报错,Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态...