17_155. 最小栈


题目描述:


解题思路:

一看到常数时间下,取出最小元素,就一直觉得应该用哈希表来存。

看了题解之后,“辅助栈”,建立一个辅助栈,同时和当前的栈进行入栈和出栈的操作,只不过辅助栈用来保存当前栈顶元素,对应的最小值。

相当于解法二中,往栈中存入的不是一个Int数据,而是一个元组,元组中存的是当前的栈顶元素,和对应的最小值,这样更有助于理解。

代码:

辅助栈
//辅助栈
class MinStack {
    Deque minStack;
    Deque stack;
    public MinStack() {
        this.stack = new LinkedList();
        this.minStack = new LinkedList();
        minStack.push(Integer.MAX_VALUE);
    }
    
    public void push(int val) {
        stack.push(val);
        minStack.push(Math.min(val, minStack.peek()));
    }
    
    public void pop() {
        stack.pop();
        minStack.pop();

    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return minStack.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */
往栈中存入元组
//往栈中存入元组
class MinStack {
    
    Deque stack;
    public MinStack() {
        stack = new LinkedList();
    }
    
    public void push(int val) {
        if (stack.isEmpty()) {
            stack.push(new Integer[]{val, val});
        }else {
            stack.push(new Integer[]{val, Math.min(val,stack.peek()[1])});
        }
    }
    
    public void pop() {
        stack.pop();
        

    }
    
    public int top() {
        return stack.peek()[0];
    }
    
    public int getMin() {
        return stack.peek()[1];
    }
}

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