func maxSlidingWindow(nums []int, k int) []int {
n := len(nums)
var ans []int
window := make([]int, n)
hh, tt := 0, -1
for i := 0; i < n; i ++ {
if hh <= tt && i - window[hh] + 1 > k {
hh ++
}
for hh <= tt && nums[window[tt]] <= nums[i] {
tt --
}
tt ++
window[tt] = i
if i - k + 1 >= 0 {
ans = append(ans, nums[window[hh]])
}
}
return ans
}
切片作为窗口:
func maxSlidingWindow(nums []int, k int) []int {
n := len(nums)
var ans []int
var window []int
for i := 0; i < n; i ++ {
if len(window) > 0 && i - window[0] >= k {
window = window[1:]
}
for len(window) > 0 && nums[window[len(window) - 1]] <= nums[i] {
window = window[:len(window) - 1]
}
window = append(window, i)
if i - k + 1 >= 0 {
ans = append(ans, nums[window[0]])
}
}
return ans
}