encontrar el numero mas repetido en un arreglo

javaxproy
28 de Marzo del 2005
Necesito un metodo que encuentre el numero mas repetido en un arreglo. Aprecio su ayuda pues lo he intentado pero no lo consigo.

Gracias,

Rafael

P-kito
28 de Marzo del 2005
Pues mira amigo esto es muy sencillo, lo puedes hacer con un for que te recorra todo el arreglo, ya sea que es unidimensional o bidimensional, aqui te pongo un ejemplo de como hacerlo, ya si te sirve pues que bien.
Te manda el int mas usado de regreso.
Cualquier cosa mandame un mensaje o un mail.

public int masUsado ( ) {
int num_mas_usado = 0;
int veces [ ] = new int [arreglo.length];
int posicion = 0;
for(int i = 0; i < arreglo.length; i++){
num_mas_usado = arreglo[i];
for(int j = i; j < arreglo.length; j++){
if(arreglo[j] == num_mas_usado){
veces[i]++;
}
}
}
num_mas_usado = 0;
for(int k = 0; k < veces.length; k++){
if(num_mas_usado < veces [k]){
num_mas_usado = veces [k];
posicion = k;
}
}
System.out.println("El numero " + arreglo[posicion] + " aparecio " + veces[posicion] + " veces.");
return arreglo[posicion];
}

Saludos,
P-kito

javaxproy
28 de Marzo del 2005
P-Kito,

Te lo agradezco esto resolvio el problema!!!!

GRACIAS!!

Rafael

Lemony Snicket
28 de Marzo del 2005
Hola,...

Sin ánimo de pelea, sólo decir que la solución de P-Kito es incompleta pues con arrays donde haya varios números repetidos el mismo número de ocasiones sólo se devolverá uno de ellos...

Por ejemplo, para el array int ai[]={1,2,3,4,4,5,2,5} se devuelve el 2 cuando el 4 y el 5 se repiten el mismo número de veces.

Te envío el código con una solución más optimizada -se ahorra un bucle for- en la que sí se contempla este caso que te comento...


import java.util.*;

public class ArrayRepetido{

public static void main(String args[]) {

int[] ai = {1,2,3,4,4,5,2,5}; // Array que trataremos.
int ocurrencias = 0;
HashMap h = new HashMap(); // Almacena Num-Ocurrencias.

for(int i=0; i<ai.length ; i++){
if((Integer)h.get(String.valueOf(ai[i]))==null){
// Si es la primera ocurrencia insertamos en la tabla con valor 1.
h.put(String.valueOf(ai[i]), new Integer(1));
}else{
// Si no es la primera ocurrencia incrementamos en uno la cantidad.
ocurrencias =((Integer)h.get(String.valueOf(ai[i]))).intValue();
h.put(String.valueOf(ai[i]), new Integer(++ocurrencias));
}
}
System.out.println("Tabla Número-Ocurrencias:"+h);


Iterator it = h.keySet().iterator();
HashMap h2 = new HashMap(); // Almacena Ocurrencias- Números del array con esas ocurrencias.
TreeSet s = null;
Integer maxOcurrencias = new Integer(0);

while (it.hasNext()){
String numeroArray = (String)it.next();
Integer ocurrenciasNumArray = (Integer)h.get(numeroArray);

if(ocurrenciasNumArray.intValue()>maxOcurrencias.intValue()){ maxOcurrencias = ocurrenciasNumArray;
}

s = (TreeSet)h2.get(ocurrenciasNumArray);
if(s==null){
// Primera vez que encontramos un número con esa cantidad de ocurrencias
// Creamos el conjunto de números para esa ocurrencia añadimos el número
// y actualizamos la tabla.
s = new TreeSet();
s.add(numeroArray);
h2.put(ocurrenciasNumArray, s);
}else{
// Actualizamos el conjunto pues hay más números con esa ocurrencia.
s.add(numeroArray);
}
}
System.out.println("Tabla Ocurrencias-Número:"+h2);
System.out.println("Los números "+(TreeSet)h2.get(maxOcurrencias)+" tienen ocurrencias máximas:"+ maxOcurrencias.intValue());
}

}

Espero que te sirva. Un saludo.