0
点赞
收藏
分享

微信扫一扫

刷题|剑指 Offer 30. 包含min函数的栈_JavaScript

往复随安_5bb5 2022-02-22 阅读 52

题目描述

剑指 Offer 30. 包含min函数的栈
在这里插入图片描述

解题思路

  1. 创建两个栈,分别为stack1stack2
  2. stack1用于存储数据,经历pushpoptopstack2用于存储最小数字
    (1)push:向stack1存入数字x,如果stack2为空或者stack2的顶部的数字大于x,就存入x,否则不存
    (2)pop:删除stack1顶部元素,此时要注意,如果stack2的顶部数字和stack1的顶部数字相同,那么stack2的顶部数字也要删除
    (3)top:返回stack1的顶部数字,注意是返回数字,但不删除,所以不能用pop,只能索引
    (4)min:返回stack2的顶部数字,注意是返回数字,但不删除,所以不能用pop,只能索引

注意点

原本在python中,要访问栈【顶部】或者队列【队尾】数据,只需要-1作为索引即可,但是在js中是不行的,因为

代码实现

/**
 * initialize your data structure here.
 */
var MinStack = function() {
    this.stack1 = [];
    this.stack2 = [];
    this.minValue = -1;
};

/** 
 * @param {number} x
 * @return {void}
 */
MinStack.prototype.push = function(x) {
    this.stack1.push(x);
    if (!this.stack2.length || this.stack2[this.stack2.length -1] >= x) {
        this.stack2.push(x)
    };
};

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

/**
 * @return {number}
 */
MinStack.prototype.top = function() {
    return this.stack1[this.stack1.length -1];
};

/**
 * @return {number}
 */
MinStack.prototype.min = function() {
    return this.stack2[this.stack2.length -1];
};

/**
 * Your MinStack object will be instantiated and called as such:
 * var obj = new MinStack()
 * obj.push(x)
 * obj.pop()
 * var param_3 = obj.top()
 * var param_4 = obj.min()
 */

在这里插入图片描述

举报

相关推荐

0 条评论