包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容