设计一个支持 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.
/*** 模拟栈* 时间复杂度:O(n)* 空间复杂度:O(n)*/class MinStack {constructor() {this.stack = []}push(val) {this.stack.push(val)}pop() {return this.stack.pop()}top() {return this.stack[this.stack.length - 1]}getMin() {return Math.min(...this.stack)}}
/*** 辅助栈* 时间复杂度:O(1)* 空间复杂度:O(n)*/class MinStack {constructor() {this.stack = []this.minStack = []}push(val) {this.stack.push(val)if (!this.minStack.length ||this.minStack[this.minStack.length - 1] >= val) {this.minStack.push(val)} else {this.minStack.push(this.minStack[this.minStack.length - 1])}}pop() {this.stack.pop()this.minStack.pop()}top() {return this.stack[this.stack.length - 1]}getMin() {return this.minStack[this.minStack.length - 1]}}
