剑指Offer题解

包含min函数的栈

2018-08-06  本文已影响97人  lvlvforever

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

首先我们可以考虑将最小元素储存在一个变量里,每次进栈首先判断min和进栈元素大小,始终保持min是最小值,但如果有数据出栈,就麻烦了,因为我们没有记录次小的元素。所以还需要有个容器存储当前栈范围内最小的元素。也就是需要两个栈,一个是数据栈,一个是辅助栈。

 Stack<Integer> mainStack = new Stack();
    Stack<Integer> auxStack = new Stack();

    public void push(int node) {
        mainStack.push(node);
        if (auxStack.isEmpty()) {
            auxStack.push(node);
        } else {
            int curMin = auxStack.peek();
            int min = curMin > node ? node : curMin;
            auxStack.push(min);
        }
    }

    public void pop() {
        if (!mainStack.isEmpty()) {
            auxStack.pop();
            mainStack.pop();
        }
    }

    public int top() {
        if (!mainStack.isEmpty()) {
            return mainStack.peek();
        }
        return -1;
    }

    public int min() {
        if (!auxStack.isEmpty()) {
            return auxStack.peek();
        }
        return -1;
    }
上一篇 下一篇

猜你喜欢

热点阅读