var queue []int
var head int
var tail int
var kVal int
func size() int {
return tail - head
}
func empty() bool {
return tail == head
}
func push(x int) {
tail++
queue[tail] = x
for getTop() < x {
pop()
}
if size() == kVal+1 {
pop()
max := getTop()
for i := head + 1; i <= tail; i++ {
num := queue[i]
if num > max {
max = num
}
}
for getTop() < max {
pop()
}
}
}
func pop() {
if empty() {
return
}
head++
}
func getTop() int {
return queue[head+1]
}
func printQ() []int {
res := make([]int, size())
for i := head + 1; i < tail; i++ {
res[i-head-1] = queue[i]
}
return res
}
func initQueue(k int) {
kVal = k
head = -1
tail = -1
queue = make([]int, 100010)
}
func maxSlidingWindow(nums []int, k int) []int {
initQueue(k)
var res []int
for i := 0; i < len(nums); i++ {
num := nums[i]
push(num)
if i >= k-1 {
res = append(res, getTop())
}
}
return res
}
扫描二维码,在手机上阅读
推荐阅读:
收藏