题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
思路一:使用一个list储存数字,遍历数组,若该元素不在list中,则将该元素加入list;若该元素已经存在于list中,则删除list中的数字。遍历结束,list中的数字则是只出现一次的数字。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
result = []
for num in nums:
if num not in result:
result.append(num)
else:
result.remove(num)
return result[0]
思路二:位运算,异或(做到线性时间复杂度和常数空间复杂度)
根据异或运算的性质,两个相同的数进行异或运算结果为0,一个数与零进行异或运算结果仍为该数。
由于给定输入的数组中只有一个元素出现一次,其他元素均出现两次,因此将数组中所有元素进行异或运算,得到的结果即为只出现一次的元素。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
result = 0
for num in nums:
result = result ^ num
return result