题目描述
未知 整数数组
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
。可以证明答案存在并且是唯一的。
示例 1:
输入:
encoded = [1,2,3]
,first = 1
输出:[1,0,2,1]
解释:若arr = [1,0,2,1]
,那么first = 1
且encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]
示例 2:
输入:
encoded = [6,2,7,3]
,first = 4
输出:[4,2,0,7,4]
提示:
2 <= n <= 10^4
encoded.length == n - 1
0 <= encoded[i] <= 10^5
0 <= first <= 10^5
题目地址:地址
正式分析
这个题很简单,但得知道异或用语言如何表达
提示:异或运算有如下性质:
- 异或运算满足交换律和结合律;
- 任意整数和自身做异或运算的结果都等于 0,即 x ⊕ x = 0;
- 任意整数和 0 做异或运算的结果都等于其自身,即 x ⊕ 0 = 0 ⊕ x = x。
本题用不到这些提示
具体代码
function decode(encoded: number[], first: number): number[] {
const result: number[] = new Array(encoded.length + 1).fill(0)
result[0] = first
for (let i = 1; i < result.length; i++) {
result[i] = result[i - 1] ^ encoded[i - 1]
}
return result
};
TS AC,执行用时:136 ms
, 在所有 TypeScript
提交中击败了 73.33%
的用户
最后
如果我在哪里写的有问题,欢迎指出,共同进步,谢谢阅读~