题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型一维数组
* @param size int整型
* @return int整型一维数组
*/
func maxInWindows( num []int , size int ) []int {
// write code here
if size == 0 || size > len(num) {
return []int{}
}
var ans []int
var dque []int //维护一个单调队列,存的是下标, 队首的位置是最大值
for i := 0; i < len(num); i++ {
// 1. 加入元素之前 从队尾 pop 掉比当前小的元素
// 2. 控制窗口的大小,如果超出 (dque[0] <= i - size),弹出队头
// 3. 加入元素
// 4. 记录结果, 当 i > = size 的时候开始记录
for len(dque) > 0 && num[dque[len(dque)-1]] <= num[i] {
dque = dque[:len(dque)-1]
}
if len(dque) > 0 && dque[0] <= i - size {
dque = dque[1:]
}
dque = append(dque, i)
if i >= size - 1 {
ans = append(ans, num[dque[0]])
}
}
return ans
}
