Problem 155

Min Stack

Posted by Ruizhi Ma on July 2, 2019

问题描述

看链接:https://leetcode.com/problems/min-stack/

解决思路

MinStack,就是创建另一个stack2,用来和push进stack1的元素比较,更小的一个,放入stack2,这样总能保证stack2的栈顶元素,是最小的

代码

package leetcode;

import com.sun.corba.se.impl.orbutil.DenseIntMapImpl;

import java.util.ArrayDeque;
import java.util.Deque;

public class MinStack {
    Deque<Integer> stack1;
    Deque<Integer> stack2;

    public MinStack() {
        stack1 = new ArrayDeque<>();
        stack2 = new ArrayDeque<>();
    }

    public void push(int x) {
        stack1.push(x);
        if (stack2.isEmpty()){
            stack2.push(x);
        }else{
            int min = stack2.peek();
            stack2.push(Math.min(min, x));
        }
    }

    public void pop() {
        stack1.pop();
        stack2.pop();
    }

    public int top() {
        return stack1.peek();
    }

    public int getMin() {
        return stack2.peek();
    }

    public static void main(String[] args) {
        MinStack minStack = new MinStack();
        minStack.push(-2);
        minStack.push(0);
        minStack.push(-3);
        minStack.getMin();
        minStack.pop();
        minStack.top();
        minStack.getMin();
    }
}