averiaguar numeros repetidos en un array

Iniciado por ped18, 30 Noviembre 2011, 00:24 AM

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

ped18

wns ! tengo k hacer un programa donde me diga si tiene algun numero reptido el array y si tiene algun nuemero repetido hacer otro nuevo aleatoriamente.
aber si me podeis exar una mano con el programilla k es para una practica de programacion y me he kdado piyado.
gracias dde ante mano.

sl2

rub'n

usa la clase Random  para el numero aleatorio, pero busca algo de codigo de lo contrario no te ayudaran, y ve buscando en google,




rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

Leyer

#2
Ando de buenas :xD usalo asi _rvr(array,0, 1);

Código (java) [Seleccionar]

public static void _rvr(int array[],int firstIndex,int secondIndex){
if(!(secondIndex==array.length)){
if(array[firstIndex]==array[secondIndex])array[secondIndex]=(int) Math.floor(Math.random()*10);
secondIndex++;
_rvr(array,firstIndex,secondIndex);
}else {
firstIndex++;
if(firstIndex==array.length-1)return;
_rvr(array,firstIndex,firstIndex+1);
}
}

ped18

wns!!! gracia x las respuesta pero lo tengo k hacer con bucles for para sacar si algun repetido y es lo k me raya k no me sale :S aber si sabeis como deberia poner los for y cuantos.
gracias de antemano :D

Sl2  :)

Fakedo0r

Espero que te sirva.


       int i;
       String sCadena;
       String sF_Cadena = "";
       String [] sArrVar;

       sCadena = "1,2,3,4,5,3,2,5,7,8,9";
       sArrVar = sCadena.split(",");

       for (i=0; i<sArrVar.length; i++)
       {
           if (sF_Cadena.indexOf(sArrVar[i])==-1)
           {
               sF_Cadena = sF_Cadena + sArrVar[i];
           }
       }
       
       System.out.println(sF_Cadena);


Saludos!

[Case]

Cita de: Fakedo0r en  8 Enero 2012, 02:36 AM
Espero que te sirva.


       int i;
       String sCadena;
       String sF_Cadena = "";
       String [] sArrVar;

       sCadena = "1,2,3,4,5,3,2,5,7,8,9";
       sArrVar = sCadena.split(",");

       for (i=0; i<sArrVar.length; i++)
       {
           if (sF_Cadena.indexOf(sArrVar[i])==-1)
           {
               sF_Cadena = sF_Cadena + sArrVar[i];
           }
       }
       
       System.out.println(sF_Cadena);


Saludos!

Esto no es muy eficiente, deberias ordenarlos primero, y despues checar si algun  numero sucesor o posterior al otro esta reptido. Eso se hace mucho mas rapido.

Fakedo0r

Cita de: [Case] en  8 Enero 2012, 23:17 PM
Esto no es muy eficiente, deberias ordenarlos primero, y despues checar si algun  numero sucesor o posterior al otro esta reptido. Eso se hace mucho mas rapido.

Para que ordenar si simplemente compruebo si hay algun duplicado sea sucesor o posterior a otro numero?  Logicamente se puede hacer mejor codigo, esto solo fue un ejemplo sencillo sobre la peticion del usuario.  :P  Seria genial que pusieras un ejemplo asi veriamos lo eficiente.  ;)

Saludos.

[Case]

Cita de: Fakedo0r en  9 Enero 2012, 00:45 AM
Para que ordenar si simplemente compruebo si hay algun duplicado sea sucesor o posterior a otro numero?  Logicamente se puede hacer mejor codigo, esto solo fue un ejemplo sencillo sobre la peticion del usuario.  :P  Seria genial que pusieras un ejemplo asi veriamos lo eficiente.  ;)

Saludos.

Es eficiente por que la complejidad del algoritmo de ordenacion es O(nlogn) mas checar si alguno se repitio, que no toma O(n), por lo que la complejidad es O(nlogn + n)

Mientras que verificando si alguno se repitió nos toma O(n^2).