Evitar que los elementos se repitan en un array

Iniciado por Npc054, 22 Noviembre 2017, 01:52 AM

0 Miembros y 1 Visitante están viendo este tema.

Npc054

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]+" ");
                }

Serapis

#1
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).

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....