文章目录

239. 滑动窗口最大值

由 Greyson 发布

239. 滑动窗口最大值


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
}

扫描二维码,在手机上阅读
收藏

0条评论

发表评论


验证码