題目:
定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間複雜度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
提示:
各函數的調用總次數不超過 20000 次
思路:
空間換時間。創建兩個棧,一個數據棧,一個輔助棧。在輔助棧中存儲數據棧中每個元素爲棧頂時,數據棧的最小值。數據棧添加元素時,此時的數據棧最小值要麼是當前添加的元素,要麼是添加前的最小值。
代碼:
class MinStack {
//數據棧
Stack<Integer> data = new Stack<>();
//輔助棧
Stack<Integer> mins = new Stack<>();
/** initialize your data structure here. */
public MinStack() {
//初始化輔助棧
mins.push(Integer.MAX_VALUE);
}
public void push(int x) {
int min = mins.peek();
if(x < min) {
min = x;
}
data.push(x);
mins.push(min);
}
public void pop() {
data.pop();
mins.pop();
}
public int top() {
return data.peek();
}
public int min() {
return mins.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();
*/