一、前记(2/3)

差点忘了这一周的的“算法大挑战”系列。不过还好有时间来学习算法。今天的题是我在做算法测试的时候遇到的一道题,觉得还是非常有意思,于是来记录一下。

二、题目描述

三、解题思路

1、我的思路

因为我是用的是Python,我感觉这道题做起来并不难。直接就是列表里面计数就完事。

参考代码:

class Solution:
    def singleNumber(self, nums) -> int:
        for i in nums:
            if nums.count(i)==1:
                return i

#as a checking
solution=Solution()
a=[1,2,3,3,1]
print(solution.singleNumber(a))

但是根据运算结果来看,运行的速度有点太慢了。

太炸了,执行用的时间太长了

2、别人的思路

ttttql,有一个特别厉害的思路,就是进行异或运算。0异或任何数不变,任何数与自己异或为0。a⊕b⊕a=b。因此如果有奇次数出现,那么返回的值就为那个落单的数字。

参考代码:

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        for i in nums:
            res^=i
        return res

四、学到了什么?

1、列表里面元素计数的方法

nums.counter()

2、异或的奇思妙用

0异或任何数不变,任何数与自己异或为0。