定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
主栈 和 辅助栈 操作主栈,辅助栈跟随一起被操作,求主栈的最值得时候,生成的辅助栈需要不严格底层或者递减,当出栈时,应该要判断是否是严格等于 最值,如果是,则跟随出栈
var MinStack = function () {
this.stack = [];
this.min_stack = [];//维护一个不严格单调递减栈 辅助栈
};
MinStack.prototype.push = function (x) {
this.stack.push(x);
if (// 辅助栈为空或者是 最后一个数 大于等于 x 则入栈
!this.min_stack.length ||
this.min_stack[this.min_stack.length - 1] >= x
) {
this.min_stack.push(x);
}
};
MinStack.prototype.pop = function () {
const val = this.stack.pop();
// 主栈出栈 如果是刚好等于 辅助栈的最后一位也就是 刚好出栈最小数,则辅助栈也得跟随出栈
if (val === this.min_stack[this.min_stack.length - 1]) {
this.min_stack.pop();
}
return val;
};
MinStack.prototype.top = function () {
return this.stack[this.stack.length - 1];
};
MinStack.prototype.min = function () {
return this.min_stack[this.min_stack.length - 1];
};