解题思路:最小栈数据结构的手动实现。通常能想到,维护一个辅助栈B,B的栈顶元素记录当前栈A中的最小元素。
tips:对象之间的比较用equals方法,不能用“==”号。在这里稍微卡了一会。
//维护一个辅助栈B,存放栈顶存放当前最小元素
class MinStack {
Stack<Integer> A, B;
/** initialize your data structure here. */
public MinStack() {
A = new Stack<Integer>();
B = new Stack<Integer>();
}
public void push(int x) {
A.push(x);
if(B.empty()) B.push(x);
else if(x <= B.peek()) B.push(x);
}
public void pop() {
if(!A.empty()){
//Integer对象之间比较,用equals方法
if(B.peek().equals(A.peek())) B.pop();
A.pop();
}
}
public int top() {
if(!A.isEmpty()){
return A.peek();
}
throw new RuntimeException("栈中元素为空,此操作非法");
}
public int getMin() {
if(!B.isEmpty()){
return B.peek();
}
throw new RuntimeException("栈中元素为空,此操作非法");
}
}
/**
* 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.getMin();
*/