面试题30. 包含min函数的栈
思路:使用辅助栈。
栈A实现正常的push,pop,top函数。
栈B在每次栈Apush的时候判断,栈顶元素是否>=要push进栈A的元素。
注意的点:
1.
if(B.empty() || B.peek() >= x)
此处必须要>=,因为在>情况下,push(0),push(0),pop(),栈B就没有元素了。
2.pop()函数中,A.pop()必须写在if循环外,因为不管怎么样都要执行。(当时写循环里了)
3.为什么不用 == 而用 equals
参考https://www.jianshu.com/p/9cb9c61b0986
面试题30. 包含min函数的栈
class MinStack { Stack<Integer> A, B; /** initialize your data structure here. */ public MinStack() { A = new Stack<>(); B = new Stack<>(); } public void push(int x) { A.add(x); if(B.empty() || B.peek() >= x) B.add(x); } public void pop() { if(A.peek().equals(B.peek())) B.pop(); A.pop(); } public int top() { return A.peek(); } public int min() { return B.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(); */