给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例:
提示:
你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。
func maxSlidingWindow(nums []int, k int) []int {
if k <= 1 {
return nums
}
queuelist := list.New()
result := make([]int, len(nums)-k+1)
// 初始化列表,列表中存在排序后的数据对应数组下标
for i := 0; i < k; i++ {
for queuelist.Back() != nil && nums[queuelist.Back().Value.(int)] < nums[i] {
queuelist.Remove(queuelist.Back())
}
queuelist.PushBack(i)
}
a := queuelist.Front().Value.(int)
result[0] = nums[a]
for i := 1; i <= len(nums)-k; i++ {
end := k - 1 + i
for queuelist.Back() != nil && nums[queuelist.Back().Value.(int)] < nums[end] {
queuelist.Remove(queuelist.Back())
}
queuelist.PushBack(end)
for queuelist.Front() != nil && queuelist.Front().Value.(int) < i {
queuelist.Remove(queuelist.Front())
}
result[i] = nums[queuelist.Front().Value.(int)]
}
return result
}