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()
     */
    
  • 相关阅读:
    gdb 调试(查看运行时数据)(五)
    Kendo UI开发教程(23): 单页面应用(一)概述
    Kendo UI开发教程(24): 单页面应用(二) Router 类
    Kendo UI开发教程(26): 单页面应用(四) Layout
    Kendo UI开发教程(25): 单页面应用(三) View
    Kendo UI开发教程(27): 移动应用开发简介
    [置顶] Kendo UI开发教程: Kendo UI 示例及总结
    web端、android端的文件上传
    [置顶] 关于本博客 http://www.imobilebbs.com
    hdu4707 Pet
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13393960.html
Copyright © 2011-2022 走看看