两个栈,一个存所有数据,一个维护栈顶最小。
import java.util.Stack;
public class Solution {
// 元素栈;
Stack<Integer> data = new Stack<Integer>();
// 辅助栈;
Stack<Integer> min = new Stack<Integer>();
Integer change = null;
public void push(int node) {
if (change != null) {
if (node <= change) {
change = node;
min.push(change);
}
data.push(node);
} else {
change = node;
min.push(change);
data.push(change);
}
}
public void pop() {
int num1 = data.pop();
int num2 = min.pop();
if (num1 != num2) {
min.push(num2);
}
}
public int top() {
return data.peek();
}
public int min() {
return min.peek();
}
}
class Solution {
public:
stack<int> data;
stack<int> dataMin;
void push(int value) {
if (!dataMin.empty()) {
int curMin = dataMin.top();
if (value < curMin) {
dataMin.push(value);
}
} else {
dataMin.push(value);
}
data.push(value);
}
void pop() {
int curTop = data.top();
data.pop();
int curMin = dataMin.top();
dataMin.pop();
if (curMin != curTop) {
dataMin.push(curMin);
}
}
int top() {
return data.top();
}
int min() {
return dataMin.top();
}
};