# 155. 最小栈
# 解题思路
利用数组可以最小成本的实现栈,主要是看最小元素的查找方式,最简单的方式就是遍历数组,找到最小值。
var MinStack = function () {
  this.stack = []
}
/**
 * @param {number} val
 * @return {void}
 */
MinStack.prototype.push = function (val) {
  this.stack.push(val)
}
/**
 * @return {void}
 */
MinStack.prototype.pop = function () {
  return this.stack.pop()
}
/**
 * @return {number}
 */
MinStack.prototype.top = function () {
  return this.stack[this.stack.length - 1]
}
/**
 * @return {number}
 */
MinStack.prototype.getMin = function () {
  let length = this.stack.length
  if (!length) return
  let minVal = this.stack[0]
  for (let i = 0; i < length; i++) {
    if (this.stack[i] < minVal) {
      minVal = this.stack[i]
    }
  }
  return minVal
}
在官方中还提供了另外 3 中解题思路:
- 利用辅助栈,在 push 的时候判断当前元素是否小于辅助栈中最小值,如果小于则将当前元素入栈,同时在出栈的时候判断当前元素是否等于辅助栈中最小值,如果是则将辅助栈中的最小值出栈。
 - 另一种方式是栈中的每个节点同时保存当前节点的值和栈内最小值。
 - 最后一种方式是利用链表自定义一个栈,链表中的每个节点保存当前节点的值、栈内最小值以及上一个节点。
 
详情可点击查看更多 (opens new window)。
# 参考
← 224. 基本计算器 946. 验证栈序列 →