Sigo recibiendo un IndexOutOfBoundsException y no puedo parecen encontrar dónde. Ive edades dedicado a tratar de resolver esto. Cualquier ayuda sería apreciada. Gracias
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;
}
}
for(int i=0; i < nums.length; i++){
ret.set(nums[i]-1, nums[i]);
}
No se establece el nums[i]-1
índice s a nums[i]
pero arrojará el error si nums[i]
es o bien menor o igual a 0
o mayor que la longitud.
A medida que la otra respuesta de @ Bahij.Mik estados (asegúrese de que upvote), no hay elementos en la lista en este punto.
Es posible que desee utilizar add()
en lugar de set()
aquí.
Tenga en cuenta que new ArrayList<>(number)
va a crear una nueva ArrayList
con una inicial de espacio para n
los elementos, no llenará los elementos que iba a pasar con un array (ni siquiera con nula)
También en
for(int i=0; i < nums.length; i++){
if(ret.get(i) == 0){
ret.set(i, i+1);
}
else{
ret.remove(i);
}
}
va a extraer los elementos, mientras que la iteración en el ArrayList
.
Esto reducirá el tamaño de la ArrayList
y que se repetirá fuera de los límites si ha quitado un elemento en algún momento.