包含min函数的栈

来源:互联网 发布:java和c语言的区别知乎 编辑:程序博客网 时间:2024/06/09 15:59

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

题目解析:

我们可能第一印象,想要在栈里边加一个辅助位,用于存储最小值,这样子,当我们入栈的时候更新最小值,但是当我们出栈的时候怎么办呢?所以我们可以添加一个辅助栈,数据栈用来存储压入的数据,而辅助栈则用来存储当前的最小值,这样两个栈同时进行压入和弹出操作,就可以十分方便的获取栈中数据的最小值。

代码如下:

    Stack<Integer> data = new Stack<>();    Stack<Integer> min = new Stack<>();    Integer temp = null;    public void push(int node) {        if (temp != null) {            if (node <= temp) {                temp = node;                min.push(node);            }            data.push(node);        } else {            temp = node;            data.push(node);            min.push(node);        }    }    public void pop() {        int num = data.pop();        int num2 = min.pop();        if (num != num2) {            min.push(num2);        }    }    public int top() {        int num = data.pop();        data.push(num);        return num;    }    public int min() {        int num = min.pop();        min.push(num);        return num;    }


0 0