Добавляйте числа в HashSet: если add вернул false, такое значение уже встречалось. Можно сразу завершить обход с true.
Определение повторяющихся элементов в массиве
Добавляйте числа в HashSet: если add вернул false, такое значение уже встречалось. Можно сразу завершить обход с true.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Функция должна установить, есть ли в переданном массиве хотя бы один элемент, встречающийся более одного раза.
Пример: Вход: [1, 2, 3, 4, 5] → false Вход: [1, 2, 3, 1, 5] → true
class Main {
public static void main(String[] args) {
int[] arr;
boolean hasDup = containsDuplicate(arr);
}
public static boolean containsDuplicate(int[] numbers) {
return false;
}
}
Ответ
Добавляйте числа в HashSet: если add вернул false, такое значение уже встречалось. Можно сразу завершить обход с true.
public static boolean containsDuplicate(int[] numbers) {
java.util.Set<Integer> seen = new java.util.HashSet<>();
for (int number : numbers)
if (!seen.add(number)) return true;
return false;
}
Ожидаемое время O(n), память O(n). Пустой массив даёт false, исходный массив не меняется. В приведённом main переменная arr объявлена, но не инициализирована: перед вызовом нужно присвоить ей массив, иначе программа не скомпилируется.