题解 | #出现一次的数字ii#

出现一次的数字ii

http://www.nowcoder.com/practice/1097ca585245418ea2efd0e8b4d9eb7a

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

相关推荐

牛至超人:哈工大已经很棒了,不需要加括号了,然后咋没有实习经历呢?火速趁寒假整一段实习,导师不让就狠狠肘击
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务