Для 32-битных целых используйте XOR: пары одинаковых чисел взаимно уничтожаются, остаётся одиночное. Для произвольных безопасных целых Number лучше вариант с Set либо BigInt.
Нахождение единственного элемента, встречающегося один раз
Для 32-битных целых используйте XOR: пары одинаковых чисел взаимно уничтожаются, остаётся одиночное. Для произвольных безопасных целых Number лучше вариант с Set либо BigInt.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан массив целых чисел, где каждое значение присутствует ровно дважды, за исключением одного особого элемента, который встречается только один раз. Требуется определить этот уникальный элемент, используя алгоритм с линейной сложностью по времени.
Ответ
Для 32-битных целых используйте XOR: пары одинаковых чисел взаимно уничтожаются, остаётся одиночное. Для произвольных безопасных целых Number лучше вариант с Set либо BigInt.
function singleNumber(numbers) {
let result = 0;
for (const value of numbers) result ^= value;
return result;
}
a XOR a равно 0, а a XOR 0 равно a; порядок не важен. Время O(n), дополнительная память O(1). Побитовые операции JavaScript приводят Number к знаковым 32 битам, поэтому это ограничение обязательно. Для больших целых можно использовать BigInt с начальным 0n; нарушенные гарантии о парах алгоритм не диагностирует.