算法: 239. 滑动窗口的最大值
题目
Offer 59 - I. 滑动窗口的最大值
给定一个数组 nums 和滑动窗口的大小 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 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3] 6 7 51 3 -1 -3 [5 3 6] 7 61 3 -1 -3 5 [3 6 7] 7
提示:
你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。
注意:本题与主站 239 题相同:https://leetcode-cn.com/problems/sliding-window-maximum/
解题
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {//单调队列//下面是要注意的点://队列按从大到小放入//如果首位值(即最大值)不在窗口区间,删除首位//如果新增的值小于队列尾部值,加到队列尾部//如果新增值大于队列尾部值,删除队列中比新增值小的值,如果在把新增值加入到队列中//如果新增值大于队列中所有值,删除所有,然后把新增值放到队列首位,保证队列一直是从大到小if (nums.length == 0) return nums;Deque<Integer> deque = new LinkedList<>();int[] arr = new int[nums.length - k + 1];int index = 0; //arr数组的下标//未形成窗口区间for (int i = 0; i < k; i++) {//队列不为空时,当前值与队列尾部值比较,如果大于,删除队列尾部值//一直循环删除到队列中的值都大于当前值,或者删到队列为空while (!deque.isEmpty() && nums[i] > deque.peekLast()) deque.removeLast();//执行完上面的循环后,队列中要么为空,要么值都比当前值大,然后就把当前值添加到队列中deque.addLast(nums[i]);}//窗口区间刚形成后,把队列首位值添加到队列中//因为窗口形成后,就需要把队列首位添加到数组中,而下面的循环是直接跳过这一步的,所以需要我们直接添加arr[index++] = deque.peekFirst();//窗口区间形成for (int i = k; i < nums.length; i++) {//i-k是已经在区间外了,如果首位等于nums[i-k],那么说明此时首位值已经不再区间内了,需要删除if (deque.peekFirst() == nums[i - k]) deque.removeFirst();//删除队列中比当前值大的值while (!deque.isEmpty() && nums[i] > deque.peekLast()) deque.removeLast();//把当前值添加到队列中deque.addLast(nums[i]);//把队列的首位值添加到arr数组中arr[index++] = deque.peekFirst();}return arr;}
}
算法: 239. 滑动窗口的最大值相关推荐
- leetcode算法题--滑动窗口的最大值
原题链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/ 滑动窗口: vector<int> ...
- 代码随想录算法训练营day13 | 239. 滑动窗口最大值 | 347.前 K 个高频元素
一.239. 滑动窗口最大值 from collections import dequeclass MyQueue: #单调队列(从大到小def __init__(self):self.queue = ...
- 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)
[LeetCode][HOT]239. 滑动窗口最大值 文章目录 [LeetCode][HOT]239. 滑动窗口最大值 package hot;import java.util.Arrays; im ...
- Suzy找到实习了吗Day 13 | 栈和队列结束啦 239. 滑动窗口最大值,347. 前 K 个高频元素
day 13 239. 滑动窗口最大值 Python的Deque模块详解 solution 我复制的,好难不会写 347. 前 K 个高频元素(一刷我没有用栈,用的哈希法) solution(hash ...
- 单调区间之239.滑动窗口最大值
单调区间 239. 滑动窗口最大值 这个题如果用普通的优先队列是有问题的,因为每次弹出去的不知道是上一个窗口的左边界还是这个窗口里的元素.我们要的是每次只弹出上一个窗口的左边界并且还能弹出最值,所以这 ...
- 力扣239. 滑动窗口最大值(自定义排序队列)
239. 滑动窗口最大值 //实现功能:peek()取得队列的最大值,比最大值先添加进来的删除,后添加进来的保留 class Mydeque{Deque<Integer> deque;pu ...
- LeetCode 239. 滑动窗口最大值(双端队列+单调栈)
文章目录 1. 题目信息 2. 解题 2.1 暴力法 2.2 双端队列法 1. 题目信息 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内 ...
- 面试题59 - I. 滑动窗口的最大值/239. 滑动窗口最大值
2020-05-11 1.题目描述 滑动窗口的最大值 2.题解 使用双端队列维护一个递减的队列 3.代码 class Solution { public:vector<int> maxSl ...
- (笔试题)滑动窗口的最大值
题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值. 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6 ...
- java 滑动窗口_【Java】 剑指offer(59-1) 滑动窗口的最大值
本文参考自<剑指offer>一书,代码采用Java语言. 题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如,如果输入数组{2, 3, 4, 2, 6, 2, 5, 1 ...
最新文章
- Python 多线程抓取网页
- 桑文锋的数据“长征”
- python 代码分块_[代码全屏查看]-python多进程分块读取文件
- java第二阶段_Java第二阶段总结
- Thymeleaf模板引擎---SpringBoot
- 海奥华预言--第一章 神秘邀请
- 信息学奥赛一本通——1001:Hello,World!
- Myeclipse包变成文件夹
- javascript实用代码大全
- 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告
- myeclipse服务器未能创建视图:抛出意外异常。
- web前端炫酷特效-CSS3制作环形星星发光动画
- 绘制神经网络工具汇总(重要)
- 草根站长的创业路:说说这两年的创业经历
- 什么是转义字符?转义字符有哪些?为什么使用转义字符?
- 使用ArcGIS实现地貌晕渲
- 基于PTB数据集实现RNN-LSTM循环神经网络(智能填词)
- HBuilderx连接微信开发者工具
- 你想过自己注定是一个普通人吗?
- python 处理大量数据_如何用python处理大量数据
热门文章
- 集成ahci驱动的xp系统_IDE转AHCI模式 for win7+SSD
- python 动态加载代码_python 动态网页爬取?(不是加载更多页的动态网页哟)?...
- Java—读取多层嵌套Json文件的内容并根据索引返回JsonObject
- WPF之HierarchicalDataTemplate
- 转自weiphone]在美做开发多年,写给国内apple开发新手的一些心得,无教程
- ASP.NET事件回传机制
- 深入理解Python中赋值、深拷贝(deepcopy)、浅拷贝(copy)
- 高可用eureka服务发现实例
- ios 8 适配须知
- whey some page need header when your fetch that page and some don't need