給定一個(gè)數(shù)組 nums瓮下,有一個(gè)大小為 k 的滑動(dòng)窗口從數(shù)組的最左側(cè)移動(dòng)到數(shù)組的最右側(cè)记劈。你只可以看到在滑動(dòng)窗口內(nèi)的 k 個(gè)數(shù)字『斩滑動(dòng)窗口每次只向右移動(dòng)一位浓镜。
返回滑動(dòng)窗口中的最大值。
示例:
提示:
你可以假設(shè) k 總是有效的劲厌,在輸入數(shù)組不為空的情況下膛薛,1 ≤ k ≤ 輸入數(shù)組的大小。
func maxSlidingWindow(nums []int, k int) []int {
if k <= 1 {
return nums
}
queuelist := list.New()
result := make([]int, len(nums)-k+1)
// 初始化列表补鼻,列表中存在排序后的數(shù)據(jù)對(duì)應(yīng)數(shù)組下標(biāo)
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
}