そこ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
し、あなたには、いくつかの点にある要素を削除した場合、あなたは範囲外の反復されます。