Определение числа с максимальной частотой в массиве

Сгруппируйте числа с подсчётом вхождений, затем выберите запись с максимальным счётчиком. При равенстве частот можно договориться выбирать меньшее число.

Короткий ответ

Что ответить на собеседовании

Сгруппируйте числа с подсчётом вхождений, затем выберите запись с максимальным счётчиком. При равенстве частот можно договориться выбирать меньшее число.

Подробный разбор

Ответ с пояснениями

Условие

Дан массив, состоящий из 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 выбирает меньший ключ; без такого правила любой элемент с максимальной частотой допустим.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее