在处理leet代码问题“最小堆栈”时,我使用push(int x)作为函数定义将元素推入ArrayList。
对于大于或等于-128(或-2 ^ 8)的输入,该程序可以正常工作。但是,如果数字小于该数字,则会出现错误。
class MinStack {
ArrayList<Integer> stack, mins;
public MinStack() {
stack = new ArrayList<>();
mins = new ArrayList<>();
}
// change to Integer, works fine
public void push(int x) {
stack.add(x);
if(mins.size() == 0 || mins.get(mins.size() - 1) >= x ){
mins.add(x);
}
}
public void pop() {
if(stack.size() > 0){
if(mins.size() > 0){
if(stack.get(stack.size() - 1) == mins.get(mins.size() - 1)){
mins.remove(mins.size() - 1);
}
}
stack.remove(stack.size() - 1);
}
}
public int getMin() {
return mins.get(mins.size() - 1);
}
}
try:push(512),push(-128),push(-128),push(512),pop(),getMin(),pop(),getMin(),pop(),getMin()
输出:-128 -128 512 在int和Integer版本中都可以正常工作
try:push(512),push(-129),push(-129),push(512),pop(),getMin(),pop(),getMin(),pop(),getMin()
输出: 整数版本:-129 -129 -129 整数版本:-129 -129 512