设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。

/**
 */
function MinStack() {
  let items = []
  let min
  // 每次push数据的时候,都要进行和最小值进行比较,拿到最小值
  this.push = function(item) {
    min = min && item > min ? min : item
    return items.push(item)
  }
  // 每次移除数据时,都要和最小值进行比较,如果不大于最小值,则返回剩余数据的最小值。
  this.pop = function(){
    let item = items.pop()
    min = item > min ? min : Math.min(...items)
    return item
  }
  this.getMin = function() {
    console.log(min)
    return min
  }
  this.top = function(){
    console.log(items[items.length - 1 ] )
    return items[items.length - 1 ] 
  }
}
let minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   // 返回 -3.
console.log(minStack.pop());
minStack.top();      // 返回 0.
minStack.getMin();   // 返回 -2.

VivenZZ
88 声望0 粉丝