Leetcode 155. Min Stack

今天做了leetcode的第155题。

题目要求我们在自己设计的数据结构中能够随时提取出所有数据中的最小值,所以如何在每次push数据的时候能够保存最小值是关键,并且需要注意的是如果我们pop出了最小值,还要能够找到下一个最小值,所以如何保留和追踪剩下的所有数据中的最小值是关键。

在discussion中排名第二的方法比较巧妙:如果我们push的当前值比最小值要小,那就先把最小值push进去(push进去之后就变成旧的最小值了),然后再push当前值,并且把当前值设置为当前的最小值。这样,如果我们pop出的值是最小值,紧接着再pop一个出来的就是剩下的所有值中的最小值(因为我们保留进去了)。

 public void push(int x) {
        // only push the old minimum value when the current 
        // minimum value changes after pushing the new value x
        if(x <= min){          
            stack.push(min);
            min=x;
        }
        stack.push(x);
    }

在submission details中耗时较少的方法是用了两个list,一个用来保存所有push的数值,另一个用来保存和追踪最小值,

转载于:https://www.cnblogs.com/LiMC-Littlewade/p/10332477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值