leetcode如何求滑动窗口最大值
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍leetcode如何求滑动窗口最大值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的
千家信息网最后更新 2025年12月03日leetcode如何求滑动窗口最大值
这篇文章主要介绍leetcode如何求滑动窗口最大值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值。
示例:
输入: = , 和 = 3输出: 滑动窗口的位置 最大值--------------- -----[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 ≤ 输入数组的大小,且输入数组不为空。
进阶:
你能在线性时间复杂度内解决此题吗?
解题思路:
1,滑动窗口+大根堆,行不通,因为窗口左边元素移出窗口的时候,不知道在堆上的位置,且会损坏堆
2,双端队列(队列内部元素降序)
A,如果当前元素大于队首元素,说明前面还在窗口中的元素没有意义了(不是最大值),清空队列,把元素放到队首
B,如果队列已满,移出队首元素(为了方便判断,队列中存数组下标)
3,队列未满或者2.B这种情况:
A,如果当前元素小于队尾元素,则,将当前元素放到队尾(以后可能是最大值)
B,如果当前元素大于队尾元素,将队尾元素弹出(不可能是最大值了),直到当前元素小于队尾元素,将当前元素放到队尾
4,注意边界情况:
如果当前元素<队首元素&&队列已满
弹出队首元素后,当前元素可能在队首,需要注意下
func maxSlidingWindow(nums []int, k int) []int { var max []int if len(nums)<1{ return max } var dq []int for i:=0;inums[dq[0]]{ dq=[]int{i} }else if i-dq[0]>k-1{ dq=dq[1:] j:=len(dq)-1 for ;(j>=0)&&(nums[i]>=nums[dq[j]]);j--{ } if j<0{ dq=[]int{i} }else{ dq=append(dq[0:j+1],i) } }else{ j:=len(dq)-1 for ;(j>0)&&(nums[i]>=nums[dq[j]]);j--{ } dq=append(dq[0:j+1],i) } fmt.Println(dq) if i>=k-1{ max=append(max,nums[dq[0]]) } } return max} 以上是"leetcode如何求滑动窗口最大值"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
元素
最大
最大值
队列
数组
输入
位置
内容
大小
情况
篇文章
移动
复杂
有效
下标
价值
兴趣
右侧
复杂度
小伙
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器运维如何管理
数据库系统的组成和功能
北京cs1.6服务器出租
软件开发管理层工资
mysql服务器安全设置
中国网络安全情况如何
打开服务器管理工具的命令
数据库搜索工具
残疾人软件开发工程师
深圳企业网络安全产品
锡山区软件开发招聘
仪器pc软件开发
葫芦岛网络安全会议
明日方舟兑换码服务器发生错误
安徽服务器机柜厂家现货虚拟主机
rust网络安全
通过网络安全建设
凯益华网络技术有限公司
专病数据库建设范围
网络安全手抄报模板七年级
河北微搜网络技术有限公司电话
邹城租房软件开发
中银软件开发合肥待遇很差吗
简易数据库设计例子
企业数据库有多大
腾讯云服务器linux怎么
公安网络安全法方案
网络安全工程师认证是
主机屋数据库激活
广州紫鲸网络技术有限公司