android开发实战 Nmap 华为鸿蒙 二叉树排序 resultMap boost tfs vbscript orm pyqt flowjs alertifyjs vue教程入门 web前端开发实战项目 jquery循环遍历 jquery对象 oracle一键卸载工具 sallenkey滤波器 c语言求和 matlab中axis input边框颜色 oracle创建唯一索引 ln函数图像 mysql重启 python连接mysql mysql教程 javadate java的string java初学者 java接口怎么写 java中long 金山wps2003 xp画图工具 球中的小鬼 groupby 微信python退出程序 服务器系统安装 js关闭当前页面 qq钱包实名认证 p6软件
当前位置: 首页 > 学习教程  > 编程语言

LeetCode题解:155. 最小栈,单个栈同时存储最小值,JavaScript,详细注释

2020/8/31 13:14:18 文章标签:

阅读更多系列文章请访问我的GitHub 博客

原题链接:https://leetcode-cn.com/problems/min-stack/

解题思路:

参考了详细通俗的思路分析,多解法的第2种方法。建议先看该题解,再来看我的注释。

  1. 入栈时,对比入栈的值与当前最小值,如果入栈的值更小,则同时存储当前最小值和入栈的值。反之,则只需要存储当前入栈的值。
  2. 出栈时,对比栈顶的值是否等于当前最小值,则表示当前的值,在入栈时同时存入了前一次的最小值和当前值,因此要进行2次pop,同时用第二次pop的值更新最小值。
  3. 该方法的重点是保持入栈和出栈的操作方式一致,同时每个阶段的最小值都被保存了。
/**
 * initialize your data structure here.
 */
var MinStack = function () {
  this.min = Infinity;
  this.stack = [];
};

/**
 * @param {number} x
 * @return {void}
 */
MinStack.prototype.push = function (x) {
  if (x <= this.min) {
    // 如果x是最小值,那么需要入栈min和x。
    // 入栈min是为了缓存上一次的min。
    // 入栈x是为了保存此次的值。
    this.stack.push(this.min, x);
    this.min = x;
  } else {
    // 如果当前的min还是最小值,则只要入栈x。
    this.stack.push(x);
  }
};

/**
 * @return {void}
 */
MinStack.prototype.pop = function () {
  if (this.stack[this.stack.length - 1] === this.min) {
    // 如果当前栈顶元素与min相同,表示之前push进去了两个值。
    // 栈顶为当前值,下一个值为上一次的最小值。
    this.stack.pop();
    this.min = this.stack.pop();
  } else {
    this.stack.pop();
  }
};

/**
 * @return {number}
 */
MinStack.prototype.top = function () {
  // 栈顶元素永远是当前值。
  return this.stack[this.stack.length - 1];
};

/**
 * @return {number}
 */
MinStack.prototype.getMin = function () {
  // 最小值会根据pop不断更新,因此可以直接返回。
  return this.min;
};

本文链接:
http://www.dtmao.cc/news_show_150063.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?