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的数值,另一个用来保存和追踪最小值,

posted @ 2019-01-29 07:27  LittleDWADE  阅读(96)  评论(0编辑  收藏  举报