题目链接
代码
func maxSlidingWindow(nums []int, k int) []int {
// 单调队列使用的栈
q := []int{}
n := len(nums)
// 结果切片
ans := []int{}
// 枚举切片
for i := 0; i < n; i++ {
// 如果栈顶元素 <= 当前元素,则一直出栈
for len(q) > 0 && nums[q[len(q)-1]] <= nums[i] {
q = q[:len(q)-1]
}
// 当前元素入栈
q = append(q, i)
// 如果窗口大小 > k,则左边界右移
if len(q) > 0 && i-q[0]+1 > k {
q = q[1:]
}
// 添加结果
if i >= k-1 {
ans = append(ans, nums[q[0]])
}
}
return ans
}