136、给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
方法一:
0异或任何数不变,任何数与自己异或为0。a⊕b⊕a=b。异或满足加法结合律和交换律。
我的提交执行用时战胜了77.75%的Python2提交记录。
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
for i in nums:
res^=i
return res
方法二:使用自带collections模块的counter函数,统计各元素出现的次数并返回一个键值对字典,再对字典进行遍历,选出其中出现次数小于2的元素。
import collections
class Solution:
def singleNumber(self,nums):
dic = collections.Counter(nums);
for key,value in dic.items():
if value < 2:
print(key)
96 ms, 在所有 Python 提交中击败了61.47%的用户