题目
思路
刚开始的想法是排序之后用栈,最后栈里面剩什么就是什么。但是时间复杂度很高,创建栈也会用到额外空间。
官方给的答案是异或运算,两个数a和b,对a和b做异或就是a^b,规则如下
a = 1
b = 2
c = 2
相同为0 ## b^c = 0
不同为1 ## a^b = 1
0与任何数做异或等于任何数 ## 0^a = a
满足交换律和结合律 ## a^b^c = a^(b^c)=a^0=a
代码
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = 0 ##0与任何数异或都是任何数
for num in nums:
a = a^num
return a