leetcode如何求滑动窗口最大值
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍leetcode如何求滑动窗口最大值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
科技信息互联网
广州互联网科技公司
互联网科技股票
九亚互联网科技
天津摩尔互联网科技
壕鑫互联网络科技
长亮科技 互联网金融
哈尔滨新华互联网科技
卫星互联网科技股票
西藏七维空间互联网科技有限公司
电子科技大学互联网创业大赛
允成互联网科技有限公司融资
互联网在线教育科技创业
为客找房互联网科技公司怎么样
互联网营销推广黑科技
上海创道互联网络科技有限公司
云鲸互联网络科技有限公司
互联网科技企业商标注意事项
互联网科技创新方面的资料
恒生科技互联网指数十大成分股
互联网科技
高科技互联网
互联网科技英文
科技伦理 互联网公司
互联网科技创新企业排名
衡水科技产业互联网平台
互联网科技公司营业执照怎么办理
深圳互联网科技的发展
全球科技与互联网公司市值变化
利用互联网等科技手段