算法与数据机构学习_第一章.栈和队列_1.设计一个有返回栈中最小元素功能的栈

来源:互联网 发布:access数据库好用吗 编辑:程序博客网 时间:2024/05/29 15:10

设计一个有getMin功能的栈(返回栈中的最小元素)

算法要求:实现一个特殊的栈,在实现栈的基本功能的基础上,添加能够实现返回栈中最小元素的栈,要求算法的时间复杂读为O(1),即在常数时间内实现。

思路:在一个栈中在时间复杂读度为O(1)返回栈中最小元素是不可能实现的额,因此借助另一个栈,即用2个栈实现,一个栈和普通的栈一样,存放元素,另一个专门用来存放栈中最小元素。

算法过程:定义2个普通的Stack栈,一个用于普通操作栈,一个用来存放栈中的最小元素,即为stackMin,这个最小元素默认是栈中第一个元素,当新添加进来的元素小于于stackMin栈中的元素时,将这个元素添加进来,到最后stackMin栈中存放的就是栈中最小元素。

算法的java代码实现如下:

public class Stack_GetMin {    public static void main(String[] args) {        MyStack stackMin = new MyStack();        stackMin.push(5);        stackMin.push(3);        stackMin.push(-9);        stackMin.push(6);        stackMin.push(9);        stackMin.push(7);        int minValue = stackMin.getMinValue();        System.out.println("存放原始数据"+stackMin);        System.out.println(minValue);    }} class MyStack extends Stack<Integer>{     Stack<Integer> stackMin = new Stack<>();    @Override    public Integer push(Integer item) {        if (stackMin.empty()) {            stackMin.push(item);        }        else if (item<=stackMin.peek()) {            stackMin.push(item);        }        return super.push(item);    }    @Override    public synchronized Integer pop() {        if (lastElement()==stackMin.peek()) {            stackMin.pop();        }        return super.pop();    }    public int getMinValue() {        System.out.println("存放最小元素"+stackMin);        return stackMin.peek();    }}
0 0
原创粉丝点击