刷题笔记《剑指offer》-第二十题 包含min函数的栈

做~自己de王妃 提交于 2019-11-29 06:02:34

题目描述:

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

思路:

    1. 使用一个辅助栈
    2. 初始时,都为空
    3. 放入第一个元素时,数据栈和辅助栈都放入同一个元素
    4. 当放入第二个甚至更多个的元素时,数据栈正常放入数据,辅助栈中放入较小的数据
    5. 弹栈都同时弹出栈顶元素
    6. 辅助栈的栈顶一直都是最小元素

代码

public class StackWithMin {

    private Stack<Integer> data_s = new Stack<>();
    private Stack<Integer> min_s = new Stack<>();

    public void push(int node) {
        if(min_s.empty()) {
            min_s.push(node);
        }
        else {
            if(node < min_s.peek()) {
                min_s.push(node);
            }
            else
                min_s.push(min_s.peek());
        }
        data_s.push(node);
    }

    public void pop() {
        data_s.pop();
        min_s.pop();
    }

    public int top() {
        return data_s.peek();
    }

    public int min() {
        return min_s.peek();
    }

}
根据费曼学习法: 学习到的东西只有输出了才能巩固得更好。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!