Дан непустой массив A, состоящий из N целых чисел. Массив содержит нечетное количество элементов, и каждый элемент массива может быть связан с другим элементом, имеющим такое же значение, за исключением одного элемента, который остается непарным.
Например, в массиве A такой, что :
A[0] = 9 A[1] = 3 A[2] = 9
A[3] = 3 A[4] = 9 A[5] = 7
A[6] = 9
элементы в индексах 0 и 2 имеют значение 9, элементы в индексах 1 и 3 имеют значение 3, элементы в индексах 4 и 6 имеют значение 9, элемент в индексах 5 имеет значение 7 и непарный. Напишите функцию:
function solution(A);
, которая, учитывая массив A, состоящий из N целых чисел, удовлетворяющих вышеуказанным условиям, возвращает значение непарного элемента.
Например, данный массив A такой, что :
A[0] = 9 A[1] = 3 A[2] = 9
A[3] = 3 A[4] = 9 A[5] = 7
A[6] = 9
функция должна возвращать 7, как описано в примере выше.
function different(a) {
let result = 0;
for (let element of a) {
result ^= element
}
return result;
}
const arr = [9, 3, 9, 3, 9, 7, 9];
Я нашел это решение, которое довольно хорошо работает с требуемым условием. Я не понимал, как использовать Bitwise XOR (^)
Я также тестировал разные массивы;
arr = [9, 3, 9, 3, 9, 7, 9]; //returns 7
arr = [9]; //returns 9
arr = [9, 3]; //returns 10
arr = [9, 3, 9, 3]; //returns 0
arr = [9, 3, 9, 9 ]; //returns 10
arr = [9, 3, 9, 2 ]; //returns 2
Может кто-нибудь объяснить мне, как это работает? Что за логика c за этим стоит? Почему он отлично работает только с необходимым условием?