最小栈

题目描述:

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

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

思路:利用辅助栈,辅助栈第一次不管数据大小都要放入,从第二次开始只存比上一个存的元素小的值。出栈的时候,只有在数据栈栈顶元素和辅助栈栈顶元素相等的情况下,辅助栈才出栈。

代码实现: 

class MinStack {
    private Stack data;
    private Stack helper;
    public MinStack() {
        this.data = new Stack<>();
        this.helper = new Stack<>();
    }
    
    public void push(int x) {
        data.add(x);
        if(helper.isEmpty() || helper.peek() >= x){
            helper.add(x);
        }
    }
    
    public void pop() {
        if(!data.isEmpty()){
            int top = data.pop();
            if(top == helper.peek()){
                helper.pop();
            }
        }
        //此处不需要抛出异常,因为不要返回值(***)
    }
    
    public int top() {
        if(data.isEmpty()){
            throw new RuntimeException("empty");
        }
        return data.peek();
    }
    
    public int getMin() {
        if(helper.isEmpty()){
            throw new RuntimeException("empty");
        }
        return helper.peek();
    }
}

 

你可能感兴趣的:(剑指offer)