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

设计一个有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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值