155. 最小栈

106 阅读1分钟

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

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

class MinStack {

private Stack<Integer> stack;
private Stack<Integer> stackMin;
/** initialize your data structure here. */
public MinStack() {
    stack = new Stack();
    stackMin = new Stack();
}

public void push(int x) {
    stack.push(x);
    if(stackMin.isEmpty() || stackMin.peek()>x){
        stackMin.push(x);
    }else{
         stackMin.push(stackMin.peek());
    }
    
}
//peek() 加remove()
public void pop() {
    if(!stack.isEmpty()){
    stack.pop();
        stackMin.pop();
    }
}
//
public int top() {
      if(!stack.isEmpty()){
    return stack.peek();
      }
    throw new RuntimeException("stack is empty");
    
}


public int getMin() {
    if(!stackMin.isEmpty()){
    return stackMin.peek();
    }
    throw new RuntimeException("stack is empty");
}

}

/**

  • Your MinStack object will be instantiated and called as such:
  • MinStack obj = new MinStack();
  • obj.push(x);
  • obj.pop();
  • int param_3 = obj.top();
  • int param_4 = obj.getMin(); */