题目 剑指 Offer 30. 包含min函数的栈
栈的特点:先进后出,后进先出。
题解 数据栈和辅助栈
0,声明一个栈为stack1
,另一个栈为stack2
1,push(-2)
到stack1
,此时该栈中的最小值是-2,因此stack2
push进-2
2,push(0)
到stack1
,此时该栈中的最小值是-2,因此stack2
再次push进-2
3,push(-3)
到stack1
,此时该栈中的最小值是-3,因此stack2
push进-3
此时两个栈中的值为:
4,此时调用最小栈的min
,从stack2
中pop
最小值为-3
5,调用最小栈的pop
操作,同时从stack1
和stack2
中把-3弹出去(删除掉)
此时两个栈中的值为:
1 2 3 4 5 6 7 -------------------------------------------------------- 栈顶 0 -2 -2 -2 栈底 stack1 stack2 -------------------------------------------------------
6,执行最小栈的top
操作,从stack1
获取出此时的栈顶元素0
7,执行最小栈的min
操作,从stack2
获取出此时的栈顶元素-2,也就是此时最小栈里的最小值为-2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 class MinStack { Stack<Integer> stack1; Stack<Integer> stack2; public MinStack () { stack1 = new Stack <Integer>(); stack2 = new Stack <Integer>(); } public void push (int x) { stack1.push(x); if (stack2.isEmpty()){ stack2.push(x); } else { if (stack2.peek() >= x) { stack2.push(x); } else { stack2.push(stack2.peek()); } } } public void pop () { stack1.pop(); stack2.pop(); } public int top () { return stack1.peek(); } public int min () { return stack2.peek(); } }
leetcode-cn
执行:
1 2 执行用时:14 ms, 在所有 Java 提交中击败了22.98%的用户 内存消耗:43.7 MB, 在所有 Java 提交中击败了17.84%的用户
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!
打赏
微信支付
支付宝