链接
https://leetcode-cn.com/problems/decode-xored-array/
耗时
解题:8 min
题解:11 min
题意
未知 整数数组 arr
由 n
个非负整数组成。
经编码后变为长度为 n - 1
的另一个整数数组 encoded
,其中 encoded[i] = arr[i] XOR arr[i + 1]
。例如,arr = [1,0,2,1]
经编码后得到 encoded = [1,2,3]
。
给你编码后的数组 encoded
和原数组 arr
的第一个元素 first
(arr[0]
)。
请解码返回原数组 arr
。可以证明答案存在并且是唯一的。
提示:
2 <= n <= 104
encoded.length == n - 1
0 <= encoded[i] <= 105
0 <= first <= 105
思路
异或运算性质:
- a^a = 0
- a^0 = a
依据异或运算性质可推得: encoded[i] = arr[i] XOR arr[i + 1]
⇒
\Rightarrow
⇒ arr[i+1] = encoded[i] XOR arr[i]
所以将第一个元素 first 放入 decoded 数组,然后遍历 encoded 数组,每次将 decoded 的最后一个元素 和 encoded 的当前元素 异或,结果即是 decoded 的当前元素,将其放入 decoded 数组。
时间复杂度: O ( n ) O(n) O(n)
AC代码
class Solution {
public:
vector<int> decode(vector<int>& encoded, int first) {
vector<int> decoded({first});
for(auto x : encoded) {
decoded.push_back(decoded.back()^x);
}
return decoded;
}
};