链接
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 <= 104encoded.length == n - 10 <= encoded[i] <= 1050 <= 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;
}
};

本文解析了LeetCode上的解码Xored数组问题,介绍了利用异或运算性质解码编码后的整数数组的方法,包括解题思路、时间复杂度以及提供了一段AC代码实例。
(位运算)简单&spm=1001.2101.3001.5002&articleId=116453048&d=1&t=3&u=303e6374dd9f49efae5542c38558d838)
904

被折叠的 条评论
为什么被折叠?



