首页 > 解决方案 > 查找数组中消失的所有数字(获取 IndexOutOFBoundsException

问题描述

我不断收到 IndexOutOFBoundsException ,我似乎找不到在哪里。我花了很长时间试图弄清楚这一点。任何帮助,将不胜感激。谢谢

class Solution {

public List<Integer> findDisappearedNumbers(int[] nums) {

    if(nums.length < 2){
        return new ArrayList<Integer>();
    }

    List<Integer> ret = new ArrayList<Integer>(nums.length);

    for(int i=0; i < nums.length; i++){
        ret.set(i,i);
    }

    for(int i=0; i < nums.length; i++){            
        ret.set(nums[i]-1, nums[i]);
    }     

    for(int i=0; i < nums.length; i++){ 
        if(ret.get(i) == 0){
            ret.set(i, i+1);
        }
        else{
            ret.remove(i);
        }
    }
    return ret;       
}

}

标签: java

解决方案


for(int i=0; i < nums.length; i++){            
    ret.set(nums[i]-1, nums[i]);
}     

在那里您将nums[i]-1s 索引设置为,但如果小于或等于或大于长度nums[i],它将引发错误。nums[i]0

正如@ Bahij.Mik的另一个回答所说(一定要投赞成票),此时列表中没有任何元素。

您可能想要使用add()而不是set()此处。

请注意,这new ArrayList<>(number)将为元素创建一个ArrayList带有初始空间的新n元素,它不会像使用数组那样填充元素(即使是 null)

此外,在

for(int i=0; i < nums.length; i++){ 
    if(ret.get(i) == 0){
        ret.set(i, i+1);
    }
    else{
        ret.remove(i);
    }
}

您在迭代ArrayList.

这将减小 的大小,ArrayList并且如果您在某个时候删除了一个元素,您将迭代越界。


推荐阅读