题目:
思路:
第一种:
import java.util.ArrayList;
class MinStack {
private ArrayList<Integer> normal;//正常栈
private ArrayList<Integer> min;//最小栈
/** initialize your data structure here. */
public MinStack() {
normal = new ArrayList<>();
min = new ArrayList<>();
}
public void push(int x) {
normal.add(x);
if (min.isEmpty()) {//若min是空的
min.add(x);//直接压栈
} else if (x < min.get(min.size() - 1)){//x小于min栈的顶元素
min.add(x);//压栈
} else {//比前一个数大,就再压一次最小的数
min.add(min.get(min.size() - 1));
}
}
public void pop() {//你出栈我也出栈
min.remove(min.size() - 1);
normal.remove(normal.size() - 1);
}
public int top() {//返回的是normal的栈顶元素
return normal.get(normal.size() - 1);
}
public int getMin() {//返回的是最小元素
return min.get(min.size() - 1);
}
}
/**
* 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();
*/
思路:
第二种:
import java.util.ArrayList;
class MinStack {
private ArrayList<Integer> normal;
private ArrayList<Integer> min;
/** initialize your data structure here. */
public MinStack() {
normal = new ArrayList<>();
min = new ArrayList<>();
}
public void push(int x) {
normal.add(x);
if (min.isEmpty()) {
min.add(x);
} else if (x <= min.get(min.size() - 1)){//只有当x大于后来插的数时,才继续压栈否则不压栈
min.add(x);
}
}
public void pop() {
int v = normal.remove(normal.size() - 1);//将normal元素出栈
if (v == min.get(min.size() - 1)) {//若normal.val=min.val,min才出栈
min.remove(min.size() - 1);
}
}
public int top() {
return normal.get(normal.size() - 1);//返回的是normal栈顶元素
}
public int getMin() {
return min.get(min.size() - 1);//返回的是min中的最小元素
}
}
/**
* 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();
*/
执行结果: