как используя Map решить эту задачу?

Вводится целое число N (1 <= N <= 10^5), далее вводится N целых чисел (каждое не превосходит 10^9 по модулю). Вывести число, которое повторяется чаще всего. Если таких несколько - вывести наименьшее из них.


Ответы (2 шт):

Автор решения: MBo

Map должен содержать пары (число;счётчик)

Для каждого числа проверяете - есть ли оно в словаре. Если есть - инкрементируете счётчик, если нет - вводите новую пару со счётчиком 1

→ Ссылка
Автор решения: DeMmAge

Простое решение в лоб. Уверен, кто-нибудь через 5 минут напишет на стримах в две строки.

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int numbersCount = input.nextInt();
        List<Integer> numbers = new ArrayList<>();
        for (int i = 0; i < numbersCount; i++) {
            numbers.add(input.nextInt());
        }

        Map<Integer, Integer> map = new HashMap<>();
        int maxCount = 0;
        int maxNumber = 0;

        for (int i = 0; i < numbersCount; i++) {
            int number = numbers.get(i);
            int count = 1;
            for (int j = 0; j < numbersCount; j++) {
                if (i == j) {
                    break;
                }
                if (number == numbers.get(j)) {
                    count++;
                }
            }
            if (count > maxCount) {
                maxNumber = number;
                maxCount = count;
            } else if (count == maxCount) {
                map.put(number, count);
            }
        }

        if (map.isEmpty()) {
            map.put(maxNumber, maxCount);
        }

        int lowest = numbers.get(0);
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getKey() < lowest) {
                lowest = entry.getKey();
            }
        }

        System.out.println(lowest + " " + map.get(lowest));
    }
}
→ Ссылка