最小栈
最小栈可以用数组实现, 如果是java, 可以用remove方法删除元素, 同时用另一个数组去维护一个递减的栈即可.
最小栈也可以只是用一个数组(或者build-in的栈)来实现, 思路是,
维护一个min变量 => 备注: 遇到空间优化的问题时, 比如从一维数组优化, 通常就是创建变量. 不断更新该变量, 变成重复利用.
每次遇到比min小的变量时, 先入栈min, 再入栈该数.
初始化时, min是最大值.
例如:
5 4 3 3
min=MAX_VALUE
MAX_VALUE 5
min=5
MAX_VALUE 5 5
min=4
MAX_VALUE 5 5 4 4
min = 3
MAX_VALUE 5 5 4 4 3
min = 3
MAX_VALUE 5 5 4 4 3 3 3
当pop的时候
3 == min
pop()
5 5 4 4 3 3
min = peek()
pop()
5 5 4 4 3
3 == min
pop()
min = peek()
pop()
5 5 4
4 == min
pop()
min = peek()
pop()
5
min == 5
pop()
min=peek()
pop()
变为空.