剑指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]
2