給定一個數組 nums,有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。
返回滑動窗口中的最大值。
示例:
image.png
提示:
你可以假設 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
}