剑指 Offer 30. 包含min函数的栈

111 阅读1分钟

剑指 Offer 30. 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 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];
};

image.png