包含 min 函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
题解
-
使用两个栈
- 算法思想
- 一个栈A进行正常栈的操作,另一个栈B用来记录某一时刻栈 A 中的最小值
- 当 push 时
- 判断 B 栈有没有元素,如果没有元素直接push
- B 栈将栈顶元素与将要加入的元素比较,如果栈顶元素小于将要加入的元素,就将栈顶再次入栈,否则将将要加入的元素入栈
- 当 pop
- 直接使用 pop()操作 A、B 栈
- 复杂度分析
- 时间复杂度O(n)
- 空间复杂度 O(n)
class MinStack { Deque<Integer> stack; Deque<Integer> assistStack; /** initialize your data structure here. */ public MinStack() { stack = new ArrayDeque<>(); assistStack = new ArrayDeque<>(); } public void push(int x) { stack.push(x); if(assistStack.size() == 0 || assistStack.peekFirst() > x){ assistStack.push(x); }else{ assistStack.push(assistStack.peek()); } } public void pop() { if(stack.size() != 0){ stack.pop(); assistStack.pop(); } } public int top() { return stack.peek(); } public int min() { return assistStack.peek(); } } /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.min(); */
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQevNq3H-1596646573395)(/Users/apple/Library/Application Support/typora-user-images/image-20200806004616234.png)]
- 算法思想
总结
- 可以举例子,找规律