Leetcode第155题 最小栈
思路
参考liweiwei1419的思路
利用一个辅助栈,使得每个元素与其相应的最小值时刻保持一一对应。
(1)辅助栈为空的时候,必须放入新进来的数;
(2)新来的数小于或者等于辅助栈栈顶元素的时候,才放入,特别注意这里“等于”要考虑进去,因为出栈的时候,连续的、相等的并且是最小值的元素要同步出栈;
(3)出栈的时候,辅助栈的栈顶元素等于数据栈的栈顶元素,才出栈。
总结一下:出栈时,最小值出栈才同步;入栈时,最小值入栈才同步。
/**
* initialize your data structure here.
*/
var MinStack = function() {
this.stack=[]
//辅助栈
this.stack2=[]
};
/**
* @param {number} val
* @return {void}
*/
MinStack.prototype.push = function(val) {
this.stack.push(val)
if(this.stack2.length == 0 || this.stack2[this.stack2.length-1]>=val){
this.stack2.push(val)
}
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
if(this.stack.pop()===this.stack2[this.stack2.length-1]){
this.stack2.pop()
}
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.stack[this.stack.length-1]
};
/**
* @return {number}
*/
MinStack.prototype.getMin = function() {
return this.stack2[this.stack2.length-1]
};
/**
* Your MinStack object will be instantiated and called as such:
* var obj = new MinStack()
* obj.push(val)
* obj.pop()
* var param_3 = obj.top()
* var param_4 = obj.getMin()
*/