当前位置: 首页 > news >正文

堆与滑动窗口的结合(算法村第十六关黄金挑战)

滑动窗口最大值

239. 滑动窗口最大值 - 力扣(LeetCode)

给你一个整数数组 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       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

示例 2:

输入:nums = [1], k = 1
输出:[1]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • 1 <= k <= nums.length

堆与滑动窗口

参考题解:239. 滑动窗口最大值 - 力扣(LeetCode)

public int[] maxSlidingWindow(int[] nums, int k)
{//创建一个大根堆,节点由nums中元素的值pair[0]及其下标pair[1]组成PriorityQueue<int[]> maxHeap = new PriorityQueue<>((int[] pair1, int[] pair2) -> (pair2[0] - pair1[0]));//将前k个元素加入大根堆for (int i = 0; i < k; i++)maxHeap.offer(new int[]{nums[i], i});//答案数组,存滑动窗口中的最大值int[] ans = new int[nums.length - k + 1];//存滑动窗口的第一个最大值ans[0] = maxHeap.peek()[0];//滑动窗口开始移动for (int i = k; i < nums.length; i++){maxHeap.offer(new int[]{nums[i], i});//不断移除堆顶最大值,直到堆顶元素的索引出现在滑动窗口中//i - k是滑动窗口(闭区间)的左边界while (maxHeap.peek()[1] <= i - k)maxHeap.poll();//滑动窗口移动后,从ans[1]开始存ans[i - k + 1] = maxHeap.peek()[0];}return ans;
}
http://www.lryc.cn/news/294811.html

相关文章:

  • ES6-let
  • 如何发布自己的npm包:
  • JavaSE——流程控制-跳转关键字(break、continue),小案例(随机数、猜数字)
  • Java HashSet 重写 equals() 和 hashCode() 对象去重
  • Mac电脑到手后的配置
  • Python中的while循环,知其然知其所以然
  • 云瞻无代码开发:连接并集成电商平台、营销系统和CRM
  • LeetCode-第2469题=温度转换
  • docer compose部署simple-docker
  • Android Studio中打开文件管理器
  • 算法42:天际线问题(力扣218题)---线段树
  • SpringBoot中使用Spring自带线程池ThreadPoolTaskExecutor与Java8CompletableFuture实现异步任务示例
  • OpenCV/C++:点线面相关计算(二)
  • 2024最新版鸿蒙HarmonyOS开发工具安装使用指南
  • Spring事务源码解析
  • 71.Spring和SpringMVC为什么需要父子容器?
  • 标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程
  • 通过 ChatGPT 的 Function Call 查询数据库
  • LLM(大语言模型)——大模型简介
  • SQLserver2008 r2 下载安装配置、使用、新建登录用户及通过Navicat远程连接
  • linux code server 网页版的vscode
  • 【leetcode100-086到090】【动态规划】一维五题合集2
  • 关闭Ubuntu 默认开启的自动安全更新
  • python统计文本 2022年9月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析
  • HomeAssistant系统添加HACS插件商店与远程控制家中智能家居
  • 计算huggingface模型占用硬盘空间的实战代码
  • Leetcode 3031. Minimum Time to Revert Word to Initial State II
  • 游戏后端如何实现服务器之间的负载均衡?
  • es6中标签模板
  • 二级C语言笔试1