OceanSide On my own FEET
Fork me on GitHub

LeetCode 155 最小栈

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


import java.util.Stack;

/**
 * leetcode 155 最小栈
 *
 * 思路:设计两个栈,一个用来保存数据,一个用来保存当前栈中最小的数据
 * 数据栈每push一个数,最小栈判断该数是否比当前保存的最小数更小,如果
 * 更小,就把该数压入最小栈,否则再加入原最小数。
 * 弹栈时,两个栈一起弹出栈顶元素
 */

public class MinStack {
    private Stack<Integer> s;
    private Stack<Integer> minS;

    public MinStack() {
        s = new Stack<>();
        minS = new Stack<>();
    }

    public void push(int val) {
        s.push(val);
        if (minS.isEmpty()) {
            minS.push(val);
        }
        else {
            if (val < minS.peek()) {
                minS.push(val);
            }
            else {
                minS.push(minS.peek());
            }
        }
    }

    public void pop() {
        s.pop();
        minS.pop();
    }

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

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

/*
    // 测试
    public static void main(String[] args) {
        MinStack ms = new MinStack();
        ms.push(1);
        System.out.println(ms.getMin());
        ms.push(-1);
        System.out.println(ms.getMin());
        ms.pop();
        System.out.println(ms.getMin());
    }
*/

}

posted @ 2021-03-29 17:23  EEthunder  阅读(51)  评论(0)    收藏  举报