Побитовое XOR для одинаковых индексированных элементов массива после реорганизации массива, чтобы сделать XOR одинаковых индексированных элементов двух массивов равными

Опубликовано: 21 Сентября, 2022

Имея два массива A[] и B[] , состоящие из N положительных целых чисел, задача состоит в том, чтобы выполнить побитовое XOR с одинаковыми индексированными элементами массива после перестановки массива B[] таким образом, чтобы побитовое XOR с одинаковыми индексированными элементами массивов A[ ] становится равным.

Примеры:

Input: A[] = {1, 2, 3}, B[] = {4, 6, 7}
Output: 5
Explanation:
Below are the possible arrangements:

  • Rearrange the array B[] to {4, 7, 6}. Now, the Bitwise XOR of the same indexed elements are equal, i.e. 1 ^ 4 = 5, 2 ^ 7 = 5, 3 ^ 6 = 5.

After the rearrangements, required Bitwise XOR is 5.

Input: A[] = { 7, 8, 14 }, B[] = { 5, 12, 3 }
Output: 11 
Explanation:
Below are the possible arrangements:

  • Rearrange the array B[] to {12, 3, 5}. Now, the Bitwise XOR of the same indexed elements are equal, i.e. 7 ^ 12 = 11, 8 ^ 3 = 11, 14 ^ 5 = 11.

After the rearrangements, required Bitwise XOR is 11.

Наивный подход: данная проблема может быть решена на основе наблюдения, что количество перестановок может быть не более N , потому что любой элемент в A[] может быть соединен только с N другими целыми числами в B[] . Итак, есть N возможных значений для X . Теперь просто XOR всех кандидатов с каждым элементом в A[] и проверьте, можно ли расположить B[] в таком порядке.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N 2 *log(N))
Вспомогательное пространство: O(N)

Эффективный подход. Описанный выше подход также можно оптимизировать, не сортируя массив и сохраняя побитовое XOR всех элементов B[] , а затем побитовое XOR со всеми элементами C[] . Теперь, если результат равен 0 , это означает, что оба массива имеют одинаковые элементы. Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте переменную, скажем, x , которая хранит XOR всех элементов массива B[].
  • Инициализируйте набор, скажем, numbers[] , чтобы хранить только уникальные числа.
  • Переберите диапазон [0, N), используя переменную i , и выполните следующие шаги:
    • Инициализируйте переменные- кандидаты как XOR для A[0] и B[i] и curr_xor как x , чтобы увидеть, равен ли он 0 после выполнения требуемых операций.
    • Переберите диапазон [0, N), используя переменную j , и выполните следующие шаги:
      • Инициализируйте переменную y как XOR A[j] и кандидата и XOR y с curr_xor.
    • Если curr_xor равен 0, то вставьте значение-кандидат в набор чисел[].
  • После выполнения вышеуказанных шагов выведите набор чисел[] в качестве ответа.

Ниже приведена реализация описанного выше подхода.

Временная сложность: O(N 2 )
Вспомогательное пространство: O(1)