算法第五天-解码异或后的数组
解码异或后的数组
题目要求
解题思路
来自[宫水三叶]
这是道模拟(重拳出击)题。
根据题目给定的规则,利用如下异或性质从头做一遍即可:
1.相同数值异或结果为0;
2.任意数值与0进行异或,结果为数值本身;
3.异或本身满足交换律
已知encoded[i-1] = arr[i-1] XOR arr[i]
,将等式两边同时[异或]上arr[i-1]
。可得:
1.encoded[i-1] XOR arr[i-1] = arr[i-1] XOR arr[i] XOR arr[i-1]
2.结合[性质三]和[性质一],可简化[右式]得encoded[i-1] XOR arr[i-1] = arr[i] XOR 0
3.结合[性质二],可简化[右式]得encoded[i-1] XOR arr[i-1] = arr[i]
代码
class Solution:
def decode(self, encoded: List[int], first: int) -> List[int]:
arr=[first]
for num in encoded:
arr.append(arr[-1] ^ num)
return arr
复杂度分析
时间复杂度:
O
(
1
)
O(1)
O(1)
空间复杂度:
O
(
N
)
O(N)
O(N)