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

返回滑动窗口中的最大值。

示例:

输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7] 
解释:

滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7

提示:

你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。

进阶:

你能在线性时间复杂度内解决此题吗?

单调双端队列入门题。

入门

class Solution {ArrayDeque<Integer> deq = new ArrayDeque<Integer>();public void helper(int[] nums,int i, int k) {//删除过期数据if (!deq.isEmpty() && deq.getFirst() == i - k)deq.removeFirst();//你比我早过期,还没我大,要你何用while (!deq.isEmpty() && nums[i] > nums[deq.getLast()])deq.removeLast();//尾部插入新数字deq.addLast(i);}public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;if (n==0 || k == 0) return new int[0];int [] output = new int[n - k + 1];int index = 0;//前k-1个结尾没答案,数字个数不够for (int i = 0; i < k; i++) {helper(nums,i, k);//记录第一个答案if (nums[i] > nums[index]) index = i;}//赋值第一个答案output[0] = nums[index];//继续操作for (int i  = k; i < n; i++) {helper(nums,i, k);output[i - k + 1] = nums[deq.getFirst()];}return output;}
}

leetcode239. 滑动窗口最大值相关推荐

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

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

  2. Leetcode--239. 滑动窗口最大值

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

  3. leetcode239. 滑动窗口最大值(思路+详解)

    一:题目 二:思路 1.这个题不能用优先队列,虽然我们可以通过优先队列得到最大值,但是我们在移动 窗口的时候,便不可以正常的删除元素了 2.虽然不能用优先对列,但是我们依然希望可以得到队首的元素的时候 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. c 语言乘法代码,C++实现大数乘法算法代码
  2. c 解析java byte,深入解析Java编程中面向字节流的一些应用
  3. 【华为云技术分享】Batch Normalization (BN) 介绍
  4. SSIS中的字符映射表转换组件
  5. 多么乐alexa网站流量数据报告助手
  6. Keras:我的第一个LSTM二分类网络模型
  7. 分享从零开始学习网络设备配置--2.1 交换机基本配置
  8. rust腐蚀怎么建立单机服务器_腐蚀rust搭建Rust服务器及联机教程
  9. 正则表达式 REGEX-Regular Expression
  10. C#设置WebBrowser默认浏览器
  11. 怎样做一个更有价值的人
  12. C语言pixel函数小程序,C语言 getpixel()用法及代码示例
  13. python一键去PDF水印,只需十行代码,超级简单...
  14. 图(Graph),也称网络(Network)
  15. SAI绘制月下狼嚎图
  16. 144-小珂的苦恼(nyoj)
  17. 微信公众号扫码模拟登录
  18. 计算机扣款公式,迟到早退扣款公式怎么写?
  19. 百度云智峰会 开放分享 百度云构建全方位技术云生态
  20. 10.4. Bahdanau 注意力

热门文章

  1. c++循环执行一个函数_循环
  2. oracle em中查看jiob,HTML5 中的 b/strong、i/em 详解
  3. 设计模式C++实现(5)——桥接模式
  4. 卡巴斯基安全浏览器_卡巴斯基杀毒软件被曝出用户上网痕迹泄露漏洞
  5. 【转】温故之.NET 异步
  6. 【转】C#Socket编程详解(一)TCP与UDP简介
  7. 【转】Microsoft Graph 桌面应用程序
  8. C#多线程编程系列(五)- C# ConcurrentBag的实现原理
  9. C#多线程编程系列(三)- 线程同步
  10. sharepoint 概念及认证方式介绍