Fork me on github

【JS】实现 MaxQueue

class MaxQueue {
    constructor() {
        this.queue = []
        this.max = []
    }

    enqueue(el) {
        this.queue.push(el)
        while(this.max.length && this.max[this.max.length - 1] < el) {
            this.max.pop()
        }
        this.max.push(el)
    }

    dequeue() {
        if(!this.queue.length) {
            return -Infinity
        }
        const el = this.queue.shift()
        if(el === this.max[0]) {
            this.max.shift()
        }
        return el
    }

    getMax() {
        if(this.max.length) {
            return this.max[0]
        }
        return -Infinity
    }
}

const maxQueue = new MaxQueue()
maxQueue.enqueue(1)
maxQueue.enqueue(2)
maxQueue.enqueue(-1)
console.log(maxQueue.getMax())
console.log(maxQueue.dequeue())
console.log(maxQueue.getMax())
console.log(maxQueue.dequeue())
console.log(maxQueue.getMax())
console.log(maxQueue.dequeue())
console.log(maxQueue.getMax())

可视化版本。

https://max-queue.vercel.app/

 

posted @ 2023-09-07 22:10  zjy4fun  阅读(5)  评论(0编辑  收藏  举报