【路飞】leetcode 1670 设计前中后队列

85 阅读1分钟

解法:数组法

思路:利用数组的方法实现各项操作,需要注意的是,中间增加和中间删除时,需要判读小数和中位数

var FrontMiddleBackQueue = function() {
    this.arr = []
};

/** 
 * @param {number} val
 * @return {void}
 */
FrontMiddleBackQueue.prototype.pushFront = function(val) {
    this.arr.unshift(val)
};

/** 
 * @param {number} val
 * @return {void}
 */
FrontMiddleBackQueue.prototype.pushMiddle = function(val) {
    let len = this.arr.length
    let middle = len / 2
    if (middle.toString().includes('.')) {
        this.arr.splice(Math.floor(middle), 0, val)
    } else {
        this.arr.splice(middle, 0, val)
    }
};

/** 
 * @param {number} val
 * @return {void}
 */
FrontMiddleBackQueue.prototype.pushBack = function(val) {
    this.arr.push(val)
};

/**
 * @return {number}
 */
FrontMiddleBackQueue.prototype.popFront = function() {
    return this.arr.shift() || -1
};

/**
 * @return {number}
 */
FrontMiddleBackQueue.prototype.popMiddle = function() {
    let len = this.arr.length
    if (!len) return -1
    let middle = (len + 1) / 2
    if (middle.toString().includes('.')) {
        return this.arr.splice(Math.floor(middle - 1), 1)
    } else {
        return this.arr.splice(middle - 1, 1)
    }
};

/**
 * @return {number}
 */
FrontMiddleBackQueue.prototype.popBack = function() {
    return this.arr.pop() || -1
};