Article
Hot100-Golang:11~20
T11 - T20
11. 滑动窗口最大值
func maxSlidingWindow(nums []int, k int) []int {
if len(nums) == 0 || k == 0 {
return []int{}
}
// 结果存储数组
res := make([]int, 0, len(nums)-k+1)
// 创建双端队列
deque := []int{}
for i := 0; i < len(nums); i++ {
// 队首是最大值,不断 pop 队尾的元素
for len(deque) > 0 && nums[i] >= nums[deque[len(deque)-1]] {
deque = deque[:len(deque)-1]
}
// 新元素放入队尾
deque = append(deque, i)
// 队头下标在窗口外的情况
if deque[0] <= i-k {
deque = deque[1:]
}
// 开始存入结果的条件判断和后续存入结果
if i >= k-1 {
res = append(res, nums[deque[0]])
}
}
return res
}