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();
*/