LeetCode hot100-11

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

我的解法会超时,就比最暴力解法优化了一点点吧。能通过49/51。
思路就是左右指针中间的是窗口。记录当前窗口的最大值,窗口滑动一下,原来左指针的值出去了,新的右指针的值进来了。其实就变了两个数。就比较下新进来这个数比最大值大还是小,大的话就成为新的最大值。出去这个数比较麻烦,如果出去的是最大值的话,就要重新比较当前整个窗口找到新的最大值。就是这一步引入了第二重循环,导致会超时。
贴一下我的代码

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if (nums.length == 0) {return new int[0];}int[] res = new int[nums.length - k + 1];int max = nums[0];for (int i = 0; i < k; i++) {if (nums[i] > max) {max = nums[i];}}res[0] = max;for (int i = 1; i < nums.length - k + 1; i++) {int j = k + i - 1;if (nums[j] > max) {max = nums[j];} else if (max == nums[i - 1]) {max = nums[i];for (int g = i; g <= j; g++) {max = Math.max(nums[g], max);}}res[i] = max;}return res;}
}

我只看了官方解法一,困难档次的题我就不追求优化了。
解法一其实和我的想法一样,但是为了不超时,那个两重循环必须去掉。第二重循环其实就是为了找比大小。堆排序是可以降低时间复杂度的,所以就用了Java里的优先队列,用了比较器之后可以看做一个大顶堆。这个堆的每个节点是int[2]的类型,int[0]是节点的值,int[1]是节点在数组中的下标。这个下标记录下来就是为了实现如果左指针指的是滑动窗口的最大值,滑一下,就找不到最大值的这种情况。当发生这种情况时,就把堆顶移出去(也就是左指针指的那个)。移出去之后会自动构建新的大顶堆,直接就找到新的最大值了。注意这种解法堆里面的元素并不一直是k个,它里面有多少元素根本不关心,只关心当前的最大值,和最大值是否还在滑动窗口里面。所以它在移除滑动窗口之外的数据时用的while循环,因为可能第一大的节点和第二大的节点都还在堆里,但是已经在滑动窗口之外了。

大顶堆是这样定义的,Java的比较器我也不太会。记一下对于优先队列O1-O2是默认的,从小到大,O2-O1是从大到小。这里用的int[]的数据类型,用的pair2-pair1,就是从大到小。先按元素值从大到小,pair2[0] - pair1[0]。如果元素值相等,再按元素下标从大到小pair2[1] - pair1[1]
PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {
public int compare(int[] pair1, int[] pair2) {
return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];
}
});
再记一下PriorityQueue的几个方法,添加元素offer, 获取堆顶元素peek, 弹出堆顶元素poll.

    public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] pair1, int[] pair2) {return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];}});for (int i = 0; i < k; ++i) {pq.offer(new int[]{nums[i], i});}int[] ans = new int[n - k + 1];ans[0] = pq.peek()[0];for (int i = k; i < n; ++i) {pq.offer(new int[]{nums[i], i});while (pq.peek()[1] <= i - k) {pq.poll();}ans[i - k + 1] = pq.peek()[0];}return ans;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/sliding-window-maximum/solutions/543426/hua-dong-chuang-kou-zui-da-zhi-by-leetco-ki6m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何解决awtk动态图锯齿状

打开awtk安装目录sdk->awtk->awtk_config.py,找到该位置 VGCANVAS NANOVG # VGCANVASNANOVG_PLUS if OS_NAME Windows: TK_ROOT TK_ROOT.replace(\\, \\\\) NANOVG_BACKEND GLES2 else: NANOVG_BACKEND GL3 # VGCANVASCAIRO 注释掉 # NANOVG_BACKENDGLES2 # N…

uni-app开发介绍以及代码案例

uni-app是一个使用Vue.js开发所有前端应用的框架&#xff0c;它允许开发者编写一套代码&#xff0c;然后将其发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序&#xff08;如微信、支付宝、百度等&#xff09;等多个平台。uni-app在开发者数量、案例、跨…

解决驱动开发中<stdlib.h> no such file 的问题

前言 在进行驱动开发时&#xff0c;需要使用malloc等函数&#xff0c;导入C库<stdlib.h>出现bug。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论…

LeetCode 每日一题 2024/3/4-2024/3/10

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/4 232. 用栈实现队列3/5 1976. 到达目的地的方案数3/6 2917. 找出数组中的 K-or 值3/7 2575. 找出字符串的可整除数组3/8 2834. 找出美丽数组的最小和3/9 2386. 找出数组…

深度学习十大算法-快速掌握!

自2006年深度学习概念被提出以来&#xff0c;20年快过去了&#xff0c;深度学习作为人工智能领域的一场革命&#xff0c;已经催生了许多具有影响力的算法。那么&#xff0c;你所认为深度学习的top10算法有哪些呢&#xff1f; 以下是大力哥我心目中的深度学习top10算法&#xff…

python中列表常用函数

列表list相关函数 列表相关函数 列表相关函数 汇总&#xff1a;. 列表: 1.list() 方法用于将序列&#xff08;元组&#xff0c;集合&#xff0c;字符串等&#xff09;转换为列表。 用法&#xff1a;list( seq ) #seq为序列&#xff1a;元组 集合 字符串等 2.列表定义&a…

案例分析篇09:Web架构设计相关20个考点(7~11)(2024年软考高级系统架构设计师冲刺知识点总结)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

研究生预答辩全解析

下午参加了预答辩&#xff0c;顺利通过&#xff01;非常开心&#xff0c;做一点小小的分享。 关于如何顺利通关学位论文预答辩&#xff01; 首先&#xff0c;预答辩最重要的两样东西是论文和演讲PPT。这是需要精心准备的&#xff0c;你用不用心&#xff0c;老师一眼就…

github 中的java前后端项目整合到本地运行

前言: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

ES6:箭头函数中的this指向问题

普通函数中的this指向函数的调用者 例子&#xff1a; 黑马程序员的说法&#xff1a;箭头函数不会创建自己的this&#xff0c;它只会从自己的作用域链的上一层沿用this 尚硅谷的说法&#xff1a;this始终指向函数声明时所在作用域下的this的值 通俗理解就是箭头函数中找this&…

Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程

Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器&#xff0c;MC开服教程&#xff0c;All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&#xff1a;https:…

vue3+ts+element-plus实际开发之统一掉用弹窗封装

vue3tselement-plus实际开发之统一掉用弹窗封装 插槽1. 官网介绍先理解 插槽、具名插槽、 作用域插槽、动态插槽名、具名作用域插槽属性和使用方法 2. 统一调用弹窗封装dome实战- 使用场景&#xff1a;- 对el-dialog进行数据动态设置- 新建一个ts文件用于统一存放组件&#xff…

设备维修带来的无限价值——易点易动设备管理系统的优势

在化工工厂中&#xff0c;设备的正常运行是保障生产顺利进行的关键。然而&#xff0c;设备难免会出现故障和损坏&#xff0c;而及时有效的设备维修对于提高生产效率和降低成本至关重要。为了解决这一问题&#xff0c;易点易动设备管理系统应运而生&#xff0c;以其卓越的功能和…

【微服务学习笔记(一)】Nacos、Feign、Gateway基础使用

【微服务学习笔记&#xff08;一&#xff09;】Nacos、Feign、Gateway基础使用 总览Nacos安装配置Nacos注册中心服务多级存储模型负载均衡规则环境隔离 配置管理配置拉取配置热更新多服务共享配置 Feign远程调用配置性能优化Fegin使用 统一网关Gateway搭建网关路由断言工厂&…

【漏洞复现】畅捷通T+ GetStoreWarehouseByStore接口处存在反序列化RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

扫雷小游戏制作教程:用HTML5和JavaScript打造经典游戏

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

go反射实战

文章目录 demo1 数据类型判断demo2 打印任意类型数据 demo1 数据类型判断 使用reflect.TypeOf()方法打印go中数据类型&#xff0c;可参考go官方API文档;使用格式化参数%T也能打印数据类型。 package mainimport "fmt" import "reflect" import "io&…

网络流量监控软件AnaTraf:优化性能、排除故障的最佳选择

目录 导言 网络流量监控的重要性 AnaTraf网络万用表的功能与优势 网络故障排除与优化网络性能 结论 导言 在当今数字化时代&#xff0c;计算机网络已经成为企业和组织的核心基础设施。然而&#xff0c;网络流量的管理和监控对于确保网络性能的稳定和优化至关重要。本文将介…

数码管动态扫描显示

摸鱼记录 Day_16 (&#xff9f;O&#xff9f;) review 前边已经学习了&#xff1a; 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 1. 今日摸鱼任务 串口接收数据 并用数码管显示 (&#xff9f;O&#xff9f;) 小梅哥视频&#xff1a; 17A 数码管段码显示与动态扫…

使用点链云管家创建瑜伽约课小程序

点链云管家 点链云管家是由上海点链科技开发的门店管理系统&#xff0c;为线下门店商家提供一站式门店运营服务平台解决方案&#xff0c;适用于瑜伽健身、美业、新零售会员制电商、母婴店、宠物店、按摩养生、服装、美容、美甲、汽车服务、商超零售、餐饮、KTV娱乐、干洗等18个…