Encuentra todos los números desapareció en una matriz (IndexOutOfBoundsException Conseguir

Hay D-:

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

}

Dnlst:
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 0o 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 ArrayListcon una inicial de espacio para nlos 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 ArrayListy que se repetirá fuera de los límites si ha quitado un elemento en algún momento.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=385681&siteId=1
Recomendado
Clasificación