题目
实现一个特殊的栈,在基本栈的基础上,增加返回栈中最小元素的方法,要求时间复杂度为O(1)
示例
stack:{4,3,9,6}
getMin() return 3;
思路
有的兄弟萌一开始可能会想直接在push的时候用一个全局变量记录最小值,但仔细想想,在没有pop的情况下是没有问题的,一旦pop了最小值就可能随之改变,如果单用一个变量时无法记录”之前”的最小值的。所以我们有了下面的思路
1.我们有两个栈,一个用于存放数据,一个用于存放最小值,每当要存数据,两个栈都进行更新(入栈)
2.若最小值栈的栈顶小于新的数据,则最小值栈重复存入其栈顶的值
3.若最小值栈的栈顶大于新的数据,则最小值栈存入新的数据
4.当pop时两个栈同时pop,即可保证最小值栈中存放的是当前数据栈中存在的数据
push过程
push过程
下面看下实际代码
1 | public static class MinStack { |