leetcode如何求滑动窗口最大值
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍leetcode如何求滑动窗口最大值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的
千家信息网最后更新 2024年11月24日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安全错误
数据库的锁怎样保障安全
杭州直播软件开发需要多少钱
怎么找自己服务器
服务器安全狗下载补丁失败
数据库安全与隐私保护
数据库的更新与维护关键技术
网络安全 厂商 估值
网络安全应该杜绝想不到
数据库系统原理ppt
对网络安全的认知
深圳鸿宇网络技术有限公司
浅析网络安全的重要性
ev服务器证书
自学网络的软件开发
软件开发架构主要有
中国互联网络技术
服务器端口压力测工具
小怪兽玩明日之后是哪一个服务器
长沙市青少年网络安全教育
可离线部署数据库
襄阳公安网络安全保卫支队徐炜
2021网络安全教育的手抄报
2021年网络安全宣传周报道
sql数据库如何查找重复的
数据库只有mdf文件
网络安全啊哒
宝塔数据库有设置字符的权限吗
怎么使网络安全
网络安全台本
盐城互联网led大屏服务器
php 下载数据库