leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)

题目

在这里插入图片描述

思路

左神讲过的经典算法,维护两个栈:

  • stack,用来存储数据
  • minStack,用来存储每个位置情况下的最小值,类似于动态规划。

每次入栈2个元素,一个是入栈的元素本身,一个是当前栈元素的最小值。
直接上例子,一看就明白了。

输入:

["MinStack","push","push","push","push","getMin","pop","getMin","pop","getMin","pop","getMin"]
[[],[2],[0],[3],[0],[],[],[],[],[],[],[]]

预期结果:

[null,null,null,null,null,0,null,0,null,0,null,2]

过程详解:

push/pop 第 0 个元素之后:
stack:		2 
minStack:	2 

push/pop 第 1 个元素之后:
stack:		2 0 
minStack:	2 0 

push/pop 第 2 个元素之后:
stack:		2 0 3 
minStack:	2 0 0 

push/pop 第 3 个元素之后:
stack:		2 0 3 0 
minStack:	2 0 0 0 

push/pop 第 2 个元素之后:
stack:		2 0 3 
minStack:	2 0 0 

push/pop 第 1 个元素之后:
stack:		2 0 
minStack:	2 0 

push/pop 第 0 个元素之后:
stack:		2 
minStack:	2 

题解

class MinStack {
    int pos;
    int[] stack; // 普通栈
    int[] minStack; // 最小栈,存放当前位置最小值

    /**
     * initialize your data structure here.
     */
    public MinStack() {
        stack = new int[10000];
        minStack = new int[10000];
        pos = -1;
    }

    public void push(int x) {
        pos++;
        stack[pos] = x;
        if (pos == 0)
            minStack[pos] = x;
        else
            minStack[pos] = minStack[pos - 1] < x ? minStack[pos - 1] : x;
        print();
    }

    public void pop() {
        pos--;
        print();
    }

    public int top() {
        return stack[pos];
    }

    public int getMin() {
        return minStack[pos];
    }

    public void print() {
        System.out.println("\npush/pop 第 " + pos + " 个元素之后:");
        System.out.print("stack:\t\t");
        for (int i = 0; i <= pos; i++) {
            System.out.print(stack[i] + " ");
        }
        System.out.println();
        System.out.print("minStack:\t");
        for (int i = 0; i <= pos; i++) {
            System.out.print(minStack[i] + " ");
        }
    }
}

/**
 * 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/sinat_42483341/article/details/107414809