leetcode面试题59

Posted cherrytab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode面试题59相关的知识,希望对你有一定的参考价值。

 

双端队列

 

实际上就是一个每次push pop的常规queue和另一个首位是最大值的queue

 

type MaxQueue struct {
    Queue     []int
    Max     []int
    Size     int
}

func Constructor() MaxQueue {
    return MaxQueue{
        Queue: []int{},
        Max:   []int{},
        Size:  0,
    }
}


func (this *MaxQueue) Max_value() int {
    if this.Size == 0 {
        return -1
    }
    return this.Max[0]
}


func (this *MaxQueue) Push_back(value int)  {
    this.Queue = append(this.Queue, value)
    if this.Size == 0 {
        this.Max = append(this.Max, value)
    } else {
        if value > this.Max[0] {
            this.Max = this.Max[0:0]
            this.Max = append(this.Max, value)
            this.Size++
            return
        }
        for i := len(this.Max) - 1; this.Max[i] < value; i-- {
            this.Max = this.Max[:i]
        }
        this.Max = append(this.Max, value)
    }
    this.Size++
}


func (this *MaxQueue) Pop_front() int {
    if this.Size == 0 {
        return -1
    }
    num := this.Queue[0]
    if num == this.Max[0] {
        this.Max = this.Max[1:]
    }
    this.Queue = this.Queue[1:]
    this.Size--
    return num
}

 

end

以上是关于leetcode面试题59的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode面试题59 - II. 队列的最大值

[LeetCode] 面试题59 - II. 队列的最大值

剑指OFFER----面试题59 - II. 队列的最大值

前端面试题之手写promise

面试题59 - I:滑动窗口的最大值(C++)

面试题59 - I:滑动窗口的最大值(C++)