继续使用前两天用到的哈希表,还从解题方法中发现了异或运算的使用方法。
1
题目描述
给定一个非空整数数组,只有一个数字出现一次,其余出现两次,找出只出现一次的数字。如输入[3,4,5,4,3],输出5。
2
知识点
思路一:建立哈希表记录每个值出现的次数
前两天刷题都是建立哈希表,思维惯性第一反应又是这个。遍历每个值,建立字典记录出现次数,返回出现次数为1的值即可。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
countnum=dict()
for i in nums:
if i in countnum:
countnum[i]=countnum[i]+1
else:
countnum[i]=1
for e,v in countnum.items():
if v == 1:
return e
思路二:集合差值
python中set表示无序不重复集合,对集合可直接求差值,得到两个集合中不同的值。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
nums.sort()
return list(set(nums[::2]) - set(nums[1::2]))[0]
思路三:异或运算(位运算)
看其他人解题思路看到的方法。异或运算规则是:如果a、b两个值不相同,则结果为1;如果a、b两个值相同,结果为0。计算机中用二进制进行存储,所以[3,5,3]通过异或有如下结果:3是011,5是101,两者异或结果为110,再与3进行异或则为011^110=101,即所要的结果5。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for i in nums:
res ^= i
return res