有两种方法:
(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)