Итак, "diffs" - это массив, такой как [1, 1, 2, 2] или [1, 2, 4, 4]."count" - это, по сути, гистограмма, где значение каждого индекса - это количество раз, которое индекс появляется в "diffs".Таким образом, гистограмма для первого примера будет [0, 2, 2] (размер гистограммы равен 1 + максимум для учета индекса 0).
Я запускаю «count» после того, как он имеетбыл правильно инициализирован, работая в обратном направлении и обновляя режим.Если текущий оцениваемый элемент в «count» равен режиму, то режим устанавливается обратно на -1, что означает отсутствие режима.Это работает для маленьких тестовых случаев, которые у меня есть, но для более крупных я не уверен, что здесь есть ошибка в оценке.
int mode = -1;
if (diffs.size() != 0) {
int[] count = new int[Collections.max(diffs) + 1];
for (int j = 0; j < diffs.size(); j++) {
count[diffs.get(j)]++;
}
int index = count.length - 1;
for (int j = count.length - 2; j >= 0; j--) {
if (count[j] > count[index]) {
if (count[j] == count[index]) {
mode = -1;
break;
}
index = j;
mode = j;
}
}
}