Максимальное количество повторяющихся элементов в массиве?

Есть массив с числами, нужно найти максимальное количество одинаковых элементов. Например массив а = {1,1,1,3,4,5,6,4,3,2,1,3,4,1,2,3,1,2} и ответ должен быть 1-6 (шесть единиц)
  • Вопрос задан
  • 4959 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Если числа целые, неотрицательные и небольшие, то просто заведите второй массив, чтобы в нем считать, сколько раз каждое число встретилось. При увеличении счетчика сразу же проверяйте значение на максимум.

Как то так:
maxval = -1;
maxcount=0;
for (i = 0; i < n; ++i) {
  ++counts[a[i]];
  if (counts[a[i]] > maxcount) {
    maxcount = counts[a[i]];
    maxval = a[i];
  }    
}


Если числа большие, то можно заменить массив counts[] на hash map.

Если ограничения по памяти серьезные, то придется отсортировать массив и в нем уже можно легко подсчитать сколько раз каждое число встречается.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Можно через Stream, но без промежуточного collect не обойтись
Stream.of(1, 1, 1, 3, 4, 5, 6, 4, 3, 2, 1, 3, 4, 1, 2, 3, 1, 2)
    // Собрать в Map, где ключ - число из массива, значение - кол-во этих чисел в массиве
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    // Отсортировать EntrySet по убыванию значений
    .entrySet()
    .stream()
    .sorted((e1, e2) -> Long.compare(e2.getValue(), e1.getValue()))
    // Взять первую (если есть) и вывести в консоль 
    .findFirst().ifPresent(e -> System.out.println(e.getKey() + " - " + e.getValue()));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы