题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
- 示例 1:
输入: [2,2,1]
输出: 1
- 示例 2:
输入: [4,1,2,1,2]
输出: 4
代码
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# 方法一, 最慢解法
# for i in nums:
# if nums.count(i) == 1:
# return i
# 方法二,最快解法
# 使用异或操作, 利用异或的归零率(a异或a=0)和恒等率(a异或0=a)
# 所以当列表中出现偶数次的值进行异或后为0, 最终余下只出现一次的值
# r = 0
# for i in nums:
# # r = r ^ i
# r ^= i
# return r
# 方法三,同上,只是了reduce和lambda,速度有略微提升,但是空间占有量也变大了
# from functools import reduce
# return reduce(lambda x, y: x ^ y, nums)
# 方法四,最简解法,同上面两个方法相差不大
return sum(set(nums)) * 2 - sum(nums)