
题目分析
- 本题要求实现一个包含min函数的栈结构并且要求min,push,pop的时间复杂度要在常量级,所以我们不能在函数中进行排序操作。我们引入一个辅助栈用来维护主栈中的最小值,每次主栈插入数据的时候同时向辅助栈中插入主栈中的最小值,每次主栈弹出数据时辅助栈也弹出当前最小值。这样辅助栈中的栈顶元素就是当前主栈中的最小元素。
代码
var MinStack = function () {
this.stack = [];
this.minStack = [];
};
MinStack.prototype.push = function (x) {
this.stack.push(x);
this.minStack.push(Math.min(x, this.min()));
};
MinStack.prototype.pop = function () {
const { stack, minStack } = this;
if (!stack.length) return;
this.stack.pop();
this.minStack.pop();
};
MinStack.prototype.top = function () {
const { stack } = this;
if (!stack.length) return -1;
return stack[stack.length - 1];
};
MinStack.prototype.min = function () {
const { minStack } = this;
if (!minStack.length) return Infinity;
return minStack[minStack.length - 1];
};