python找出只出现一次的数字_【LeetCode 136】只出现一次的数字(Python)

题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

一、思路

通过遍历题目给定的非空数组,记录首次出现的数,存入一个新建的空列表a内;已出现的数字计入另一个新建的空列表b内(重复的数)。然后遍历题目给定的非空数组是非在b内,不在的就是只出现过一次的数。

时间复杂度:O(n)

空间复杂度:O(n)

题目要求不使用额外的空间来实现,也就是空间复杂度应该是O(1),且具有线性时间复杂度O(n)。我的思路在空间复杂度上不符合要求。

代码:(因为我只想到这种方法,所以还是写出了代码作为参考。)

class Solution:

def singleNumber(self, nums: List[int]) -> int:

a=[]

b=[]

for i in nums:

if i not in a:

a.append(i)

else:b.append(i)

for i in nums:

if i not in b:

return i

二、其他思路

官方提出了一种符合题目要求的思路,使用异或运算。应用于这道题目就是遍历所有数,让每一个元素与全组进行异或运算,结果是1的就是答案。

官方解释:

答案是使用位运算。对于这道题&#

你可能感兴趣的:(python找出只出现一次的数字_【LeetCode 136】只出现一次的数字(Python))