题目如下:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
第一次尝试:
思路:创建两个栈,第一个栈正常存放push()进来的元素,第二个栈在push()元素时进行比较再压入元素,确保第二个栈中的数字永远为从小到大排列,这样调用min()时只需要返回数组2的第一个元素即可。
注意:if(x <= this.minElement[0]){
is.minElement.unshift(x);
}; //因为使用的是unshift() 因此必须为<=。
代码:
var MinStack = function() {
this.stackA = [];
this.minElement=[];
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function(x) {
this.stackA.push(x);
if(!this.minElement.length){
this.minElement[0] = x;
}else{
if(x <= this.minElement[0]){
this.minElement.unshift(x);
}else{
this.minElement.push(x);
};
};
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
let element = this.stackA.pop();
if(this.minElement.includes(element)){
this.minElement.splice(this.minElement.indexOf(element),1);
};
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.stackA[this.stackA.length - 1];
};
/**
* @return {number}
*/
MinStack.prototype.min = function() {
return this.minElement[0];
};
通过了测试用例。
好的解法:
思路:我们可以创建两个栈,一个栈是主栈 stackstack,另一个是辅助栈 minStackminStack,用于存放对应主栈不同时期的最小值。
var MinStack = function() {
this.x_stack = [];
this.min_stack = [Infinity];
};
MinStack.prototype.push = function(x) {
this.x_stack.push(x);
this.min_stack.push(Math.min(this.min_stack[this.min_stack.length - 1], x));
};
MinStack.prototype.pop = function() {
this.x_stack.pop();
this.min_stack.pop();
};
MinStack.prototype.top = function() {
return this.x_stack[this.x_stack.length - 1];
};
MinStack.prototype.min = function() {
return this.min_stack[this.min_stack.length - 1];
};
作者:demigodliu
链接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/solution/fu-zhu-zhan-bao-han-minhan-shu-de-zhan-b-fx7t/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
注意:
- 辅助栈设置为[Infinity],方便后续比较。
- 辅助栈依次存储每次push()元素后对应最小的元素即可,这样就不需要频繁使用数组不同的方法 。