剑指offer-20、包含min函数的栈
题⽬描述定义栈的数据结构,请在该类型中实现⼀个能够得到栈中所含最⼩元素的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 出去即可。
public class Solution { private Stack datas = new Stack(); private Stack mins = new Stack(); /** * 将元素压入栈中 * @param value 要压入的值 */ public void push(int node) { datas.push(node); // 如果辅助栈为空,或新值
页:
[1]