有两种方法:
(1)对A进行sort排序,那么出现三次的数字就会被排在一起,例如:1,1,1,2,3,3,3。这样我们只要用指针一个个遍历过去,若A[i]=A[i+1],则跳过下个,即i += 3,直至找到A[i]!=A[i+1],输出A[i]即可;
(2)直接依序遍历A中所有数字进行判断及运算,初始化一个值result = 0,对于第i位数字,是否在其后续还存在这个数字,若是,则result -= i,反之则result += 2i;若i是出现三次的,必然有result - i - i + 2i = result,不影响结果,影响结果的只有唯一的只出现一次的数字,因此最终return int(result/2)即可。
就运算时间而言,方法(1)更快
代码如下:
class Solution: def singleNumber(self , A ): # A.sort() # i = 0 # while i+1 < len(A): # if A[i] == A[i+1]: # i += 3 # else: # return A[i] # return A[i] result = 0 for index, i in enumerate(A): if i in A[index+1:]: result -= i else: result += i*2 return int(result/2)