1.找单独的数

46 阅读1分钟

关于第一道题,找单独的数

不使用额外空间的解法需要使用异或XOR操作

    # 初始化一个变量来存储异或的结果
    result = 0
    
    # 遍历列表中的每一个数字
    for card in cards:
        # 将当前数字与结果变量进行异或操作
        result ^= card
    
    # 返回结果变量,这个变量现在存储的就是唯一的数字
    return result


if __name__ == "__main__":
    # Add your test cases here

    print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4)
    print(solution([0, 1, 0, 1, 2]) == 2)

为何可行,可以从异或运算的性质证明。 根据菜鸟教程位运算(&、|、^、~、>>、 | 菜鸟教程。 摘录异或运算的性质可得

性质

  1. 交换律
  2. 结合律: (a ^ b) ^ c == a ^ (b ^ c)
  3. 对于任何数 x,都有 x ^ x = 0x ^ 0 = x
  4. 自反性:a ^ b ^ b = a ^ 0 = a

我们可以从自反性得出,可以抵消掉偶数次出现的相同的数字,只留下奇数次出现的数字。