-Просто используйте HashMap, который содержит значения индекса массива в качестве ключей и номера их появления в качестве значений.
-Обновите HashMap при прохождении цикла for, проверив, существует ли текущий индекс в HashMap.ЕСЛИ ЭТО ДЕЛАЕТСЯ, найдите этот двойник в хэш-карте и посмотрите, сколько раз оно уже произошло, и поместите его обратно в HashMap с еще одним вхождением.
-Я сделал это на Java, потому что похоже, что вы используете.Что также хорошо, так это то, что временная сложность равна O (n), и это лучшее, что вы могли бы получить для этого типа сценария, потому что вы должны посетить каждый элемент хотя бы один раз.
-Так если у вас есть такой массив, как double: {1,2,3,1,1,1,5,5,5,7,7,7,7,7,7,7, 7,7} Тогда хеш-карта в конце будет выглядеть примерно так: {1-> 4, 2-> 1, 3-> 1, 5-> 3, 7-> 9} То есть «1 произошло 4»2 раза произошло 1 раз .... 7 произошло 9 раз "и т. д.
public static double mode(double [] arr)
{
HashMap arrayVals = new HashMap();
int maxOccurences = 1;
double mode = arr[0];
for(int i = 0; i<arr.length; i++)
{
double currentIndexVal = arr[i];
if(arrayVals.containsKey(currentIndexVal)){
int currentOccurencesNum = (Integer) arrayVals.get(currentIndexVal);
currentOccurencesNum++;
arrayVals.put(currentIndexVal, currentOccurencesNum );
if(currentOccurencesNum >= maxOccurences)
{
mode = currentIndexVal;
maxOccurences = currentOccurencesNum;
}
}
else{
arrayVals.put(arr[i], 1);
}
}
return mode;
}