题⽬描述
定义栈的数据结构,请在该类型中实现⼀个能够得到栈中所含最⼩元素的min 函数(时间复杂度为O(1) )。
此栈包含的⽅法有:
- push(value) :将value 压⼊栈中
- pop() :弹出栈顶元素
- top() :获取栈顶元素
- min() :获取栈中最⼩元素
思路及解答
双栈法(推荐,实现简单)
使用两个栈:
- 主栈:存储所有元素
- 辅助栈:存储当前主栈中的最小值
push ⼀个元素的时候,都需要push 进datas stack ,但是push 进⼊mins stack 需要满⾜条件:当前的mins stack 是空的,直接放⼊。或者当前的mins stack 的栈顶元素⼤于或者等于push 进来的值。
pop ⼀个元素的时候,如果栈为空则什么都不操作,如果栈不为空,则判断datas 的第⼀个元素是否和mins 的第⼀个元素相等。如果相等的话那么就需要将mins 和datas pop 出去第⼀个元素,否则只需要将datas 的第⼀个元素 pop 出去即可。
[code]public class Solution { private Stack datas = new Stack(); private Stack mins = new Stack(); /** * 将元素压入栈中 * @param value 要压入的值 */ public void push(int node) { datas.push(node); // 如果辅助栈为空,或新值 |