zoukankan      html  css  js  c++  java
  • LeetCode 155 最小栈

    设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

    • push(x) —— 将元素 x 推入栈中。
    • pop() —— 删除栈顶的元素。
    • top() —— 获取栈顶元素。
    • getMin() —— 检索栈中的最小元素。

    示例:

    输入:
    ["MinStack","push","push","push","getMin","pop","top","getMin"]
    [[],[-2],[0],[-3],[],[],[],[]]
    
    输出:
    [null,null,null,null,-3,null,0,-2]
    
    解释:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.getMin();   --> 返回 -2.
    

    1. 辅助栈

    使用一个栈来保存元素,使用另外一个栈来保存最小元素。

    /**
     * initialize your data structure here.
     */
    var MinStack = function() {
        this.x_stack = [];
        // 因为不加Infinity的话,push 第一个元素的时候,最小栈是空的,还要做空判断,加了Infinity更简单了
        this.min_stack = [Infinity];
    };
    
    /** 
     * @param {number} x
     * @return {void}
     */
    MinStack.prototype.push = function(x) {
        this.x_stack.push(x);
        this.min_stack.push(Math.min(this.min_stack[this.min_stack.length - 1], x));
    };
    
    /**
     * @return {void}
     */
    MinStack.prototype.pop = function() {
        this.x_stack.pop();
        this.min_stack.pop();
    };
    
    /**
     * @return {number}
     */
    MinStack.prototype.top = function() {
        return this.x_stack[this.x_stack.length - 1];
    };
    
    /**
     * @return {number}
     */
    MinStack.prototype.getMin = function() {
        return this.min_stack[this.min_stack.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.getMin()
     */
    

    2. 使用一个变量 min 来保存最小值

    /**
     * initialize your data structure here.
     */
    var MinStack = function() {
      this.stack = [];
      this.min = null;
    };
    
    /** 
     * @param {number} x
     * @return {void}
     */
    MinStack.prototype.push = function(x) {
      if(!this.stack.length) this.min = x;
      this.min = Math.min(x, this.min);
      this.stack.push(x);
    };
    
    /**
     * @return {void}
     */
    MinStack.prototype.pop = function() {
      this.stack.pop();
      this.min = Math.min(...this.stack);
    };
    
    /**
     * @return {number}
     */
    MinStack.prototype.top = function() {
      return this.stack[this.stack.length - 1];
    };
    
    /**
     * @return {number}
     */
    MinStack.prototype.getMin = function() {
      return this.min;
    };
    
    /**
     * 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.getMin()
     */
    
  • 相关阅读:
    作业day04
    python开发学习day03 (基本数据类型; 输入输出; 基本运算符)
    作业day03
    作业day02
    python开发学习day02 (编程语言; 解释器 ; 运行方式; IDE; 变量)
    BasePage基础页面的封装
    设定浏览器驱动
    webdriver(chrome无头浏览器)
    webdriervAPI(窗口截图)
    webdriervAPI(常用的js方法)
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13393960.html
Copyright © 2011-2022 走看看