# 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. 验证栈序列 →