LeetCode 155 最小栈(Java实现)

题目描述:

题目描述

方法一(ArrayList):
代码:

class MinStack {
    
    
    ArrayList<Integer> list;

    /** initialize your data structure here. */
    public MinStack() {
    
    
        list = new ArrayList<Integer>();
    }
    
    public void push(int x) {
    
    
        list.add(x);
    }
    
    public void pop() {
    
    
        list.remove(list.size()-1);
    }
    
    public int top() {
    
    
        return list.get(list.size()-1);
    }
    
    public int getMin() {
    
    
        int min = Integer.MAX_VALUE;;
        for(Integer i : list){
    
    
            if(i<min){
    
    
                min = i;
            }
        }
        return min;
    }
}

/**
 * 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();
 */

结果:

结果

方法二(Deque):

使用这种方法需要注意:消除栈每pop掉一个栈顶对最小数的影响,所以建立一个mindq用来存储每push一个元素之后产生的最小数,从而deque每pop掉一个数后,mindq也会pop掉经由deque pop的元素产生的最小值,mindq的栈顶依旧是当前deque的最小数。

class MinStack {
    
    
    Deque<Integer> deque;
    Deque<Integer> mindq;

    /** initialize your data structure here. */
    public MinStack() {
    
    
        deque = new LinkedList<Integer>();
        mindq = new LinkedList<Integer>();
        mindq.push(Integer.MAX_VALUE);
    }
    
    public void push(int x) {
    
    
        deque.push(x);
        mindq.push(Math.min(mindq.peek(),x));
    }
    
    public void pop() {
    
    
        deque.pop();
        mindq.pop();
    }
    
    public int top() {
    
    
        return deque.peek();
    }
    
    public int getMin() {
    
    
        return mindq.peek();
    }
}

/**
 * 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();
 */

结果:
结果

猜你喜欢

转载自blog.csdn.net/weixin_43752257/article/details/110448704