Задачи
November 22, 2023
Задача. Исходный массив
Задача. Дан целочисленный массив pref размера N.
Необходимо вернуть массив arr размера N, где
pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]. ^ - это операция XOR.
pref = [5,2,0,3,1] Output: [5,7,2,3,2]
- pref[0] = 5. - pref[1] = 5 ^ 7 = 2. - pref[2] = 5 ^ 7 ^ 2 = 0. - pref[3] = 5 ^ 7 ^ 2 ^ 3 = 3. - pref[4] = 5 ^ 7 ^ 2 ^ 3 ^ 2 = 1.
Разбор
Чтобы решить эту задачу достаточно вспомнить свойство операции XOR:
a XOR b = c a XOR c = b
pref[1] = arr[0] ^ arr[1] = 5 ^ 7 = 2
arr[1] = arr[0] ^ pref[1] = 5 ^ 2 = 7
Очевидно, что arr[0] == pref[0].
Тогда получаем обратную формулу:
arr[i] = pref[0] ^ pref[1] ^ ... ^ pref[i]
Реализация
public static int[] FindOriginArray(int[] pref) { int[] res = new int[pref.Length]; res[0] = pref[0]; for (int i = 1; i < pref.Length; i++) { res[i] = pref[i - 1] ^ pref[i]; } return res; }
https://gist.github.com/unilecs/1030d13856f4ccafaf0d7598eb585d8f