【力扣】239. 滑动窗口最大值
发布日期:2021-06-29 19:47:19
浏览次数:2
分类:技术文章
本文共 1691 字,大约阅读时间需要 5 分钟。
题目:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例 1:
输入: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
示例 2:
输入:nums = [1], k = 1
输出:[1] 示例 3:输入:nums = [1,-1], k = 1
输出:[1,-1] 示例 4:输入:nums = [9,11], k = 2
输出:[11] 示例 5:输入:nums = [4,-2], k = 2
输出:[4]提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104 1 <= k <= nums.length答案:
解法一:优先队列class Solution { public int[] maxSlidingWindow(int[] nums, int k) { //优先队列中存的是数组,包括nums的值和该值的下标。 //只要保证最大值的下标在滑动窗口中,该值就是滑动窗口中的最大值,如果不在,则出队至最大值在滑动窗口内。 int n = nums.length; if(n == 0 || k == 0 || n == 1) return nums; int[] num = new int[n - k + 1]; Queuequeue = new PriorityQueue (new Comparator (){ @Override public int compare(int[] o1, int[] o2){ //降序排列,如果相同,则下标大的在前面 return o1[0] != o2[0] ? o2[0] - o1[0] : o2[1] - o1[1]; } }); for(int i = 0; i < k; i++){ queue.add(new int[]{ nums[i], i}); } num[0] = queue.peek()[0]; for(int i = k; i < n; i++){ queue.add(new int[]{ nums[i], i}); while (queue.peek()[1] <= i - k) { //最大值的下标小于滑动窗口的最小下标,则出队 queue.poll(); } num[i - k + 1] = queue.peek()[0]; } return num; }}
解法二:双端队列
//使用滑动窗口,从队列右边入队//左边最大元素出队,右边小于最大元素的元素出队略
转载地址:https://darkness.blog.csdn.net/article/details/115658943 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月17日 10时43分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
驱动开发小结
2019-04-30
Qt Creator创建纯C、c++工程
2019-04-30
Android单元测试之 Robolectric3.0+
2019-04-30
qt configure参数解释
2019-04-30
Git Push 避免用户名和密码方法
2019-04-30
Java总结篇系列:Java多线程(一)
2019-04-30
产品设计开发要领
2019-04-30
Android线程操作类(暂停、重新开启、停止)
2019-04-30
android - JNI - 一维数组、二维数组的访问与使用
2019-04-30
在 Android Studio 2.2 中愉快地使用 C/C++
2019-04-30
C++和JNI的数据转换
2019-04-30
JNI 传递结构体参数
2019-04-30
JNI中枚举类型作为参数
2019-04-30
qlineedit tab焦点处无法输入问题
2019-04-30
android精确绘制文字位置的方法
2019-04-30
Android中UI线程与后台线程交互设计的5种方法
2019-04-30
[Android]调用字符串资源的几种方法
2019-04-30
Android更新UI的两种方法——handler与runOnUiThread()
2019-04-30
Java中new Thread的弊端及Java四种线程池的使用
2019-04-30
android线程与UI消息传递
2019-04-30