最小栈

实现一个这样的栈,这个栈除了可以进行普通的push、pop操作以外,还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最小值。栈里面存放的都是 int 整数,并且数值的范围是 [-100000, 100000]。要求所有操作的时间复杂度是 O(1)。
附加:如果空间复杂度也能O(1)的话可加分。

解:存放差值

若将a={2,1,3,.0}入栈,
2进,初始化栈顶为0 , 最小值为2
1进,栈顶为差值1-2,差值 小于0,最小值为1
3进,栈顶为差值3-1 差值大于0,最小值为1
0进,栈顶为差值0-1 ,差值小于0,最小值为0

所以堆栈为{0,-1,2,-1}

链接:https://www.cxyxiaowu.com/2968.html

代码实现:

public class 设计一个有gitMin的栈 {

    private Stack<Integer> stack = new Stack<Integer>();
    private int min;

    public void push(int x) {
        if (stack.isEmpty()) {
            min = x;
            stack.push(0);
        } else {
            // 计算差值
            int compare = x - min;
            stack.push(compare);
            // 如果差值小于0,显然 x 成为最小值,否则最小值不变
            min = compare < 0 ? x : min;
        }
    }

    public void pop() {
        int top = stack.peek();
        // 如果top小于0,显然最小值也一并会被删除,此时更新最小值
        min = top < 0 ? (min - top) : min;
        stack.pop();
    }

    public int getMin() {
        return min;
    }
 }

你可能感兴趣的:(最小栈)