Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Npc054 en 22 Noviembre 2017, 01:52 am



Título: Evitar que los elementos se repitan en un array
Publicado por: Npc054 en 22 Noviembre 2017, 01:52 am
Bueno tengo dos preguntas la primera seria sobre como hacer que no se repitan los elementos en estos "conjuntos" y seria sobre como eliminar elementos repetidos. Se que tengo que hacer una comparación entre los elementos de uno y otro. Pero ya lo intente y no se como implementarlo. Podrían ayudarme?.

           int k=1;
           for(int j=0;j<5;j++){
                    a[j]=A[j];
             
                  for(int j=0;j<10;j++){
                    if (A[j]==B){
                    k=0;
                 }
              }
               if(k==1) {
                 a[j]=B;
                 i++;
                }
         k==1;
         }
           }
                for(int j=0;j<10;j++){
                    System.out.print(a[j]+" ");
                }


Título: Re: Evitar que los elementos se repitan en un array
Publicado por: Serapis en 23 Noviembre 2017, 03:44 am
Una modificación del agoritmo de ordenamiento counting, hace lo que quieres...
Ese algoritmo tiene serias limitaciones, porlo que no vale para todos los arrays.
Los límites son:
- Solo números.
- Deben ser enteros (no valen decimales, porque los índices de un array siempre son vaores enteros).
- Valores entre el mínimo y el máximo pequeños (porque precisa un array adicional en memoria de tamaño (valorMaximo-valorMinimo + 1) ).

Si tu array se ciñe a esos límites, puedes usarlo, no existe ninguna implementación más rápida que esta (pero con esas limitaciones).
Código:
array = funcion OrdenarYEliminarRepes( array Ar() )
    entero k, min, max, n
    array temp(), salida()
 
    // recorrer el array para buscar el valor mayor y menor del array
    min = ar(0)
    max = min
    bucle para k desde 1 a ar.count-1
        si (ar(k) < min) luego
            min = ar(k)
        oSi (ar(k) > max) luego
            max = ar(k)
        fin si
    fin bucle

    // OJO: si min es pongamos 20 y máx 100 millones se creará un array de 100 millones-20, aunque tu array de entrada solo tenga 40 valores...
    redimensionar temp(desde 0 hasta max-min)

    // recorrer el bucle otra vez para saber quñe valores aparecen y consignarlos en el array temp.
    bucle para k desde 0 hasta ar.count-1
        si (temp( ar(k)+min ) = 0) luego
            n +=1
            temp( ar(k)+min ) = 1
        fin si
    fin bucle

    redimensionar salida (0 a n-1)
    n = 0
    // recorrer el array temp, para consignar los valores presentes a la salida.
    bucle para k desde 0 hasta max-min
        si (temp( ar(k)+min ) = 1) luego
            salida(n) = temp( ar(k)+min )
            n +=1
        fin si
    fin bucle

    devolver salida
fin funcion

et voilá... ya tienes el array ordenado y con solo una copia de cada valor (sin duplicados). Recuerda que solo vale si el array se atiene a los límitaciones indicadas....