栈 —(简单)— 包含min函数的栈

题目:栈 —(简单)— 包含min函数的栈

思路:

该题的主要考察点在于min函数的编写,可以额外利用一个栈minStack来保存最小值。对入栈的数字进行判断,若该数字小于等于minStack栈顶的数字,则将其入minStack栈,否则忽略。当我们进行弹栈操作时,对将要弹出的数字与minStack栈顶数字比较,若相等,则弹出minStack栈顶数字,否则忽略。

代码:

注:代码中用ArrayList模拟了栈操作,可以直接使用Stack或者LinkedList。

class MinStack {
    private int index;
    private int minIndex;
    private ArrayList<Integer> list;
    private ArrayList<Integer> minStack;

    public MinStack() {
        index = -1;
        minIndex = -1;
        list = new ArrayList<>();
        minStack = new ArrayList<>();
    }

    public void push(int x) {
        index++;
        list.add(index, x);
        if (minIndex == -1) {
            minIndex++;
            minStack.add(minIndex, x);
        } else {
            if (x <= minStack.get(minIndex))  {
                minIndex++;
                minStack.add(minIndex, x);
            }
        }
    }


    public void pop() {
        if (list.get(index).equals(minStack.get(minIndex))) {
            minIndex--;
        }
        index--;
    }

    public int top() {
        return list.get(index);
    }

    public int min() {
        return minStack.get(minIndex);
    }
}

 


版权声明:本文为qq_40588565原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。