AcWing打卡活動
《劍指Offer》打卡活動
週三第七題 包含min函數的棧
/**
* 思路
* 需要一個額外的棧,用以記錄最小值
* 例子:如壓入如下順序
* 3 -1 2 -2 5
* 則recordStack 的內容爲
* 3 -1 -1 -2 -2
*
*
*/
class MinStack {
Stack<Integer> stack;
Stack<Integer> recordStack;
int min;
/** initialize your data structure here. */
public MinStack() {
stack = new Stack();
recordStack = new Stack();
}
public void push(int x) {
stack.push(x);
if(recordStack.empty() || x < min) {
recordStack.push(x);
min = x;
} else {
recordStack.push(min);
}
}
// 彈出操作 兩個棧同時彈出
public void pop() {
stack.pop();
recordStack.pop();
// 如果彈出後,輔助棧爲空,則需要更新最小值
if(!recordStack.empty()) {
min = recordStack.peek();
} else {
min = Integer.MIN_VALUE;
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return recordStack.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.getMin();
*/
發現可以不用使用min這個變量,如此一來代碼量將更少,代碼如下
/**
* 思路
* 需要一個額外的棧,用以記錄最小值
* 例子:如壓入如下順序
* 3 -1 2 -2 5
* 則recordStack 的內容爲
* 3 -1 -1 -2 -2
*
*
*/
class MinStack {
Stack<Integer> stack;
Stack<Integer> recordStack;
/** initialize your data structure here. */
public MinStack() {
stack = new Stack();
recordStack = new Stack();
}
public void push(int x) {
stack.push(x);
if(recordStack.empty() || x < recordStack.peek()) {
recordStack.push(x);
} else {
recordStack.push(recordStack.peek());
}
}
// 彈出操作 兩個棧同時彈出
public void pop() {
stack.pop();
recordStack.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return recordStack.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.getMin();
*/