已解决
算法 滑动窗口最大值-(双指针+队列)
来自网友在路上 181881提问 提问时间:2023-09-23 01:32:06阅读次数: 81
最佳答案 问答题库818位专家为你答疑解惑
牛客网: BM45
题目: 数组num, 窗口大小size, 所有窗口内的最大值
思路: 用队列作为窗口,窗口内存储数组坐标,left = window[0], right从数组0开始遍历完数组,每次新增元素时,(1)先对窗口大小进行收缩到size大小范围,即right-left>=0时,left右移,即window弹出window[0],直到符合size范围;(2)对window从右侧开始所有比right坐标小的元素全部弹出window,最后将right处元素入队,此时以right为右端的窗口内的最大值即为num[window[0]];以此规律处理完num的所有元素。
注意: window进行收缩时要注意len(window)>0
代码:
// gopackage main
// import "fmt"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param num int整型一维数组 * @param size int整型 * @return int整型一维数组
*/
func maxInWindows( num []int , size int ) []int {// write code hereif len(num) < size || size == 0 || len(num) == 0 {return []int{}}res := []int{}window := []int{}for i := 0; i < size; i++ {for len(window) > 0 && num[window[len(window)-1]] < num[i] {window = window[:len(window)-1]}window = append(window, i)}res = append(res, num[window[0]])for i := size; i < len(num); i++ {for len(window)>0 && i - window[0] >= size {window = window[1:]}for len(window) > 0 && num[window[len(window)-1]] < num[i] {window = window[:len(window)-1]}window = append(window, i)res = append(res, num[window[0]])}return res
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"算法 滑动窗口最大值-(双指针+队列)":http://eshow365.cn/6-11805-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: mysql 半同步复制模式使用详解
- 下一篇: 树莓派无桌面配置WiFi连接