Вы должны предоставить несколько примеров входов и выходов. Не ясно, какой именно выход вы ожидаете. Вы просто хотите найти наибольшее количество дубликатов, а затем умножить это число на частоту, с которой оно появляется? Например:
1 2 5 5 5 7 8 8 = three 5's = 15
Или, может быть, две победы 8, потому что их общее количество составляет 16? Или вы собираетесь суммировать все дубликаты? В любом случае я бы начал с этого, где MAX_NUM
- это наибольшее ожидаемое число в массиве:
int[] counts = new int[MAX_NUM];
for (int i = 0; i < numbers.length; i++) {
counts[numbers[i]]++;
}
Теперь у вас есть количество каждого числа. Если вы ищете номер с наибольшим количеством:
int num = 0;
int best = 0;
for (int i = 0; i < counts.length; i++) {
if (counts[i] > best) {
num = i;
best = counts[i];
}
}
Теперь num * best
будет 15 для моего примера. Теперь num
будет содержать число, которое встречается чаще всего, а best
будет счетчиком для него. Если есть два числа с одинаковым количеством, выиграет большее число. Возможно, хотя в моем примере выше вы хотите 16 вместо 15, потому что две 8 имеют большую сумму:
int max = 0;
for (int i = 0; i < counts.length; i++) {
max = Math.max(i * counts[i], max);
}
Теперь max
будет иметь 16.