- 使用enumerate
该思想使用了额外的空间,首先找出nums中的所有元素,存放在数组a中。
循环数组a,使用enumerate返回数组a中每个元素的下标,答案的索引位置只有一个,所以长度为1。
判断当长度为1时,返回数组a中对应的元素。
- 官方解法:使用二进制位
class Solution:
def singleNumber(self, nums: List[int]) -> int:
ans = 0
for i in range(32):
total = sum((num >> i) & 1 for num in nums)
if total % 3:
# Python 这里对于最高位需要特殊判断
if i == 31:
ans -= (1 << i)
else:
ans |= (1 << i)
return ans
3. 官方解法:哈希表
class Solution:
def singleNumber(self, nums: List[int]) -> int:
freq = collections.Counter(nums)
ans = [num for num, occ in freq.items() if occ == 1][0]
return ans
使用哈希映射统计数组中每个元素的出现次数。对于哈希映射中的每个键值对,键表示一个元素,值表示其出现的次数。
在统计完成后,我们遍历哈希映射即可找出只出现一次的元素。