アレイに消えたすべての数値を検索(取得はIndexOutOfBoundsException

そこD-:

私はは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;       
}

}

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

そこには、設定nums[i]-1へのインデックスをnums[i]、それは場合は、エラーをスローしますnums[i]どちらか小さいか等しい0長さより以上。

他の答え @からBahij.Mik状態(それをupvoteしてください)、この時点でリストに要素がありません。

あなたは使用することをお勧めしますadd()代わりにset()ここに。

new ArrayList<>(number)新しい作成されますArrayList初期とスペースのためにn、それは(もないヌル付き)の配列で起こるように、それは要素を満たしていないだろう要素を

また、中

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

反復処理しているときには、要素を削除していますArrayList

これは、のサイズを小さくしますArrayListし、あなたには、いくつかの点にある要素を削除した場合、あなたは範囲外の反復されます。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=385678&siteId=1