как используя 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));
}
}