Сгруппируйте числа с подсчётом вхождений, затем выберите запись с максимальным счётчиком. При равенстве частот можно договориться выбирать меньшее число.
Определение числа с максимальной частотой в массиве
Сгруппируйте числа с подсчётом вхождений, затем выберите запись с максимальным счётчиком. При равенстве частот можно договориться выбирать меньшее число.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан массив, состоящий из 10 целых значений (возможны дублирования). Необходимо вывести элемент, который встречается в массиве наибольшее количество раз. Реализовать решение, используя возможности Stream API.
Ответ
Сгруппируйте числа с подсчётом вхождений, затем выберите запись с максимальным счётчиком. При равенстве частот можно договориться выбирать меньшее число.
Map<Integer, Long> counts = java.util.Arrays.stream(numbers).boxed()
.collect(java.util.stream.Collectors.groupingBy(
java.util.function.Function.identity(),
java.util.stream.Collectors.counting()));
java.util.Optional<Integer> mostFrequent = counts.entrySet().stream()
.max(Map.Entry.<Integer, Long>comparingByValue()
.thenComparing(Map.Entry.comparingByKey(java.util.Comparator.reverseOrder())))
.map(Map.Entry::getKey);
Для массива из десяти элементов результат присутствует. Ожидаемое время O(n), память O(k). Обратный порядок ключей в tie-breaker вместе с max выбирает меньший ключ; без такого правила любой элемент с максимальной частотой допустим.