Encontrar el valor más frecuente en una matriz y luego elegir el valor más bajo, si hay un empate

WoeIs:

Tengo el siguiente programa que se parece a una matriz "a" y entonces la salida el valor de la matriz que aparece con mayor frecuencia. Sin embargo otra condición que quisiera poner en práctica es que en el caso de un empate en dos valores diferentes aparecen una cantidad igual de veces, el valor más bajo se pone de salida.

Así que para el siguiente código con una matriz:

int a[] = {34, 34, 20, 20, 15};

Se da salida a 34 sin embargo quiero que la salida 20 en su lugar, ya que es un valor inferior y aparece justo como muchas veces en la matriz.

public class Arrays3 {
    public static void main(String[] args){
        int a[] = {34, 34, 20, 20, 15};
        mode(a);
    }
    public static int mode(int[] a) {
        int[] counts = new int[101];
        int maxCount = 0;
        int maxKey = 0;

        for(int i = 0; i < a.length; i++) {
            counts[a[i]]++;
            if(counts[a[i]] > maxCount) {
                maxCount = counts[a[i]];
                maxKey = a[i];
            }
        }
        System.out.println(maxKey);
        return maxKey;
    }
}
GBlodgett:

Se puede comprobar en contra maxKeyy luego hacer algo a lo largo de las líneas de:

 if(counts[a[i]] == maxCount && counts[a[i]] < maxKey) {
       maxKey = counts[a[i]];
 }

Así que si alguna vez hay un empate, el maxKeyse establecerá en el elemento más pequeño. Entonces, si count[a[i]]es mayor que nunca maxCount, maxKeyse anulará y se convierten en el elemento que se produce con mayor frecuencia:

for(int i = 0; i < a.length; i++) {
     counts[a[i]]++;

     if(counts[a[i]] > maxCount) {
          maxCount = counts[a[i]];
          maxKey = a[i];
      }
      if(counts[a[i]] == maxCount && counts[a[i]] < maxKey) {
        maxKey = a[i];
      }
}
System.out.println(a[maxKey]);

Salida

20

Supongo que te gusta

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