算法第五天-解码异或后的数组

解码异或后的数组

题目要求

解题思路

来自[宫水三叶]
这是道模拟(重拳出击)题。
根据题目给定的规则,利用如下异或性质从头做一遍即可:
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)