Encontre o modo (valor mais frequente em um array) usando um loop for simples?

Como faço para encontrar o modo (valor mais freqüente em uma matriz) usando um loop for simples?

O código compila com uma saída incorreta.

Aqui está o que eu tenho:

public static void mode(double [] arr) { double mode=arr[0]; for(int i = 1; i<arr.length; i++) { if(mode==arr[i]) { mode++; } } return mode; } 

Primeiro, classifico o array por ordem e depois conto as ocorrências de um número. Nenhum hashmaps apenas for loop e instruções if.

Meu código:

 static int Mode(int[] n){ int t = 0; for(int i=0; i n[j]){ t = n[j-1]; n[j-1] = n[j]; n[j] = t; } } } int mode = n[0]; int temp = 1; int temp2 = 1; for(int i=1;i= temp2){ mode = n[i]; temp2 = temp; } } return mode; } 

-Apenas use um HashMap que contém os valores do índice da matriz como as chaves e seus números de ocorrência como os valores.

-Atualize o HashMap à medida que você percorre o loop for, verificando se o índice atual já existe no HashMap. Se isso acontecer, encontre o dobro no mapa de hash e veja quantas vezes ele já ocorreu e coloque-o de volta no HashMap com mais uma ocorrência.

-Eu fiz isso em Java porque é o que parece que você está usando. O que também é bom é que a complexidade de tempo é O (n), que é o melhor que você poderia obter para esse tipo de cenário, porque você precisa visitar todos os elementos pelo menos uma vez.

-Então, se você tem um array como este de duplas: {1,2,3,1,1,1,5,5,5,7,7,7,7,7,7,7,7,7} Então o mapa hash será parecido com isso no final: {1-> 4, 2-> 1, 3-> 1, 5-> 3, 7-> 9} Significando que “1 ocorreu 4 vezes, 2 ocorreu 1 hora …. 7 ocorreram 9 vezes “etc.

  public static double mode(double [] arr) { HashMap arrayVals = new HashMap(); int maxOccurences = 1; double mode = arr[0]; for(int i = 0; i= maxOccurences) { mode = currentIndexVal; maxOccurences = currentOccurencesNum; } } else{ arrayVals.put(arr[i], 1); } } return mode; } 

Esse código é uma maneira diferente que não usa hashmaps. Esse método, criado em java, usa um array como parâmetro e cria outro array chamado “numberCount” dentro do método. Esta matriz “numberCount” irá definir seu índice para o valor na matriz. O índice de “numberCount” que contém o valor na matriz passada adicionará 1 ao valor de “numberCount” (“++ numberCount [array [i]]”) e então irá para o próximo valor na matriz (repita até o fim da matriz). Em seguida, cria outro loop for para percorrer cada valor da matriz em “numberCount”, que qualquer índice que tenha o maior valor / contagem será armazenado e retornará como “max”. Este método terá que passar por algumas mudanças difíceis para usar um array duplo. mas parece funcionar muito bem com um array int.

 public static int findMostFrequentValue(int[] array) { int i; int[] numberCount = new int[100]; for (i = 0; i < array.length; i++)++numberCount[array[i]]; int max = 0; int j; for (j = 0; j < numberCount.length; j++) { if (numberCount[j] > max) max = j; } return max; } 

Você deve verificar o número de ocorrências de cada elemento em sua matriz. Você pode fazer isso comparando cada elemento da matriz com ela e com os outros por meio de dois loops internos.

Lembre-se, se a matriz não estiver classificada e contiver mais de 1 valor modal (repetindo o número de ocorrências), isso retornará a primeira. Talvez seja sábio ordenar o array primeiro por Arrays.sort (array) para que você possa escolher o menor ou maior valor modal.

 public static int modeOfArray(int[] array){ int mode; int maxOccurance = 0; for(int i=0; i maxOccurance){ maxOccurance = occuranceOfThisValue; mode = array[i]; } } return mode; }