道路標識155号


私の第1ラウンド

var MinStack = function() {
    this.stack = [];
    this.topIndex = -1;
};

/** 
 * @param {number} val
 * @return {void}
 */
MinStack.prototype.push = function(val) {
    this.stack[++this.topIndex] = val;
};

/**
 * @return {void}
 */
MinStack.prototype.pop = function() {
    this.topIndex--;
    this.stack.length--;
};

/**
 * @return {number}
 */
MinStack.prototype.top = function() {
    return this.stack[this.topIndex];
};

/**
 * @return {number}
 */
MinStack.prototype.getMin = function() {
    return Math.min(...this.stack);
};
最高価格を求めてまだO(1)で表していません.

私の2回目の答え


var MinStack = function() {
    this.stack = [];
    this.topIndex = -1;
    this.min = [Number.MAX_SAFE_INTEGER];
};

/** 
 * @param {number} val
 * @return {void}
 */
MinStack.prototype.push = function(val) {
    this.stack[++this.topIndex] = val;
    if (val <= this.min[this.min.length-1]) this.min[this.min.length] = val;
};

/**
 * @return {void}
 */
MinStack.prototype.pop = function() {
    if (this.stack[this.topIndex] === this.min[this.min.length-1]) this.min.length--;
    this.topIndex--;
    this.stack.length--;
    
};

/**
 * @return {number}
 */
MinStack.prototype.top = function() {
    return this.stack[this.topIndex];
};

/**
 * @return {number}
 */
MinStack.prototype.getMin = function() {
    return this.min[this.min.length-1];
};
minという配列を追加します.pushの場合、minの末尾の要素以下であれば、minの配列でも一緒にpushします.popの場合、popの値がminの末尾の要素と同じであれば、minもpopします.その後、getMinはmin配列の末尾の要素を返します.その結果,速度は2倍に向上した.気持ちがいいですね!

他人の解答


他の人の接着剤も私とあまり差がなく、単独でMin Stackを作って使いました.