---
# System prepended metadata

title: 2433. Find The Original Array of Prefix Xor

---

## [2433. Find The Original Array of Prefix Xor](https://leetcode.com/problems/find-the-original-array-of-prefix-xor/description/)

# 1. Tóm tắt đề bài

Bạn cần phải tìm một mảng $arr$ có $n$ phần tử, biết giá trị của mảng $pref$. $pref[i]$ được định nghĩa là [tổng $XOR$](https://www.loginradius.com/blog/engineering/how-does-bitwise-xor-work/) của $i$ phần tử đầu tiên trong dãy.

##### Giới hạn

$1 \le n \le 10^5$.
$1 \le pref[i] \le 10^6$.

# 2. Tiếp cận lời giải

**Độ phức tạp dự tính: $O(n)$**.

Ta vận dụng tính chất của phép toán $XOR$, ký hiệu là $\oplus$:

Nếu $a \oplus b = c$ ta có thể suy ra $a \oplus c = b$ và $c \oplus b = a$.

Dựa vào cách tính của hàm $pref$, ta có $pref[i] = pref[i - 1] \oplus arr[i]$. Từ đây, suy ra:

$arr[i] = pref[i] \oplus pref[i - 1].

# 3. Lời giải chi tiết

Sau khi rút ra nhận xét như phần tiếp cận, phần còn lại không quá khó để lập trình.

Code mẫu: https://leetcode.com/problems/find-the-original-array-of-prefix-xor/submissions/1087982511/

### Độ phức tạp thuật toán

Thời gian: $O(n)$

Bộ nhớ mở rộng: $O(1)$

# 4. Kết luận & Gợi ý mở rộng

Bài không khó, nhưng yêu cầu các bạn nắm chắc phần [các phép toán bitwise](https://vnoi.info/wiki/algo/basic/bitwise-operators.md). Hãy coi như đây là một trong những bài cơ bản nhé! 

