1、问题很简单,可以有多种方法,但降低时间复杂度,要用技巧
2、方法:
使用位运算。对于这道题,可使用异或运算 。数组中的全部元素的异或运算结果即为数组中只出现一次的数字。(原因见异或运算第三条性质)
3、异或运算有以下三个性质。
(1)任何数和 000 做异或运算,结果仍然是原来的数,即 a⊕0=a。
(2)任何数和其自身做异或运算,结果是 000,即 a⊕a=0。
(3)异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b
4、代码
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return reduce(lambda x, y: x ^ y, nums)
reduce()表示累次运算,x^y表示按位异或