leetcode如何求滑动窗口最大值
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍leetcode如何求滑动窗口最大值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
戴尔服务器前面面板怎么打开
泰宁网络安全试点
失物招领数据库项目总结
软件开发苹果13还是15寸
世界网络安全大赛360
云服务器区别
百旺开票服务器异常没有进项
sql数据库恢复内存不够
gt数据库
网络安全短语180个字
查看当前数据库编码
脚本迁移数据库
火源服务器
北航网络安全学院在哪
互联网科技手机数码
知网交易数据库
在指定数据库建表SQL
sea服务器挑战者
网络安全 群众 时评
银行web端软件开发笔试题
杭州未来科技城除了互联网还有啥
小目标为什么停止服务器
实行网络安全保密性的方法是
进入当前数据库
万方数据库获取年鉴吗
数据库与网络工程专业哪个好
开软件开发公司
浙江服务器设备回收公司哪里有
软件开发后台叫什么
网页服务器系统繁忙怎么进去