题目简单,我的思路使用哈希表建立 元素和出现的次数的键值对。
然后遍历这个哈希表,找到次数为1的。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
dic = {}
for n in nums:
if n not in dic:
dic[n] = 1
else:
dic[n] += 1
for k, v in dic.items():
if v == 1:
return k
看了 题解,恍然大悟。我建立每个元素出现的次数,其实还要遍历一次寻找次数为1的元素。但实际上,我仅仅在第一个建立哈希表的时候,判断这个元素出现的次数是不是大于1了,大于了就把它从哈希表删除。那么最终哈希表剩下的元素键,就是次数为1的元素。不需要在遍历一次了。时间复杂度为O(N)。不是N方。
还有一种方法是位运算。
根据
一个数字的二进制和0做异或运算,得到的还是这个数字。
两个相同的数字做异或运算,得到的结果为0
那么如果数据集里面不重复的数字只有一个,对所有数字做异或运算,得到的结果一定是这个数字。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for n in nums:
res ^= n
return res