给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
思路一
1.新建列表a=[],遍历原列表
2.原列表元素不在新列表中,则将这个元素放进新列表中
3.若新列表中存在原列表元素,则删除新列表中的这个元素
4.返回新列表中的元素 a=[0]
class Solution:
def singleNumber(self, nums: List[int]) -> int:
a = []
for i in nums:
if i not in a:
a.append(i)
else:
a.remove(i)
return a[0]
思路二
count()方法直接找到该元素
class Solution:
def singleNumber(self, nums: List[int]) -> int:
for i in nums:
if nums.count(i) ==1:
return i
思路三
利用set()创造一个无序不重复的元素集,然后利用原数组所有元素的和比新的元素集的两倍少一个数的原理
class Solution:
def singleNumber(self, nums: List[int]) -> int:
sum1 = 0
for i in nums:
sum1 += i
new_nums = set(nums)
sum2 = 0
for i in new_nums:
sum2 += i
return sum2*2-sum1
思路四
使用python的异或操作,0异或任何数不变,任何数与自己异或为0。a⊕b⊕a=b。异或满足加法结合律和交换律。(俺也是看其他大佬的答案才知道还有这东西)这是各位大佬需要的资料
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for i in nums:
res = res ^ i
return res
各位大哥大姐求个赞😜!