题目描述:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) — 将元素 x 推入栈中。
pop() — 删除栈顶的元素。
top() — 获取栈顶元素。
getMin() — 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.minStack.getMin(); --> 返回 -2.
算法实现:
/*** initialize your data structure here.*/var MinStack = function() {this.stack = []this.min = Infinity};/*** @param {number} x* @return {void}*/MinStack.prototype.push = function(x) {this.stack.push(x)this.min = Math.min(this.min, x)};/*** @return {void}*/MinStack.prototype.pop = function() {let pop = this.stack.pop()if (this.min === 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()*/
思考:
没有使用辅助栈的方式,由于除了getMin操作,其他都是数组和栈的基本操作,所以只要搞定min就可以了,min直接再出栈和入栈的时候用Math.min函数就可以搞定,所以很简单就可以得出结果。
总结:
应用了栈的基本操作,辅助栈的方法也值得看一下。
