Назад к вопросам
СБЕР
Senior
7
//Дан массив чисел, в котором все числа кроме одного имеют пару, //найти число, которое встречается только один раз // <= [1, 0, 3, -2, 9, 9, 1, -2, 0] // => 3 int find(int[] arr){ Map<Integer, Integer> freq = new HashMap<>(); for (int i : arr){ freq.merge(i, 1, Integer::sum); } return freq.entrySet().stream() .filter(e -> e.getValue() == 1) .findFirst().get().getKey() .orElseThrow( () -> new NoSuchElementException("no unique elements") ); }
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В представленном коде реализован поиск уникального числа в массиве, где все числа, кроме одного, встречаются по паре.
Идея решения:
- Использовать
Map<Integer, Integer>для подсчёта количества вхождений каждого числа. - Затем найти элемент с частотой 1.
Однако в коде есть ошибка: метод findFirst().get() возвращает объект Optional, и вызов orElseThrow после get() некорректен. Нужно сначала вызвать orElseThrow на Optional, а потом получить ключ.
Исправленный вариант:
int find(int[] arr) {
Map<Integer, Integer> freq = new HashMap<>();
for (int i : arr) {
freq.merge(i, 1, Integer::sum);
}
return freq.entrySet().stream()
.filter(e -> e.getValue() == 1)
.map(Map.Entry::getKey)
.findFirst()
.orElseThrow(() -> new NoSuchElementException("no unique elements"));
}
Этот метод эффективно находит число, которое встречается один раз, за время O(n).