給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。
說明:
你的算法應(yīng)該具有線性時(shí)間復(fù)雜度。 你可以不使用額外空間來實(shí)現(xiàn)嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
思路一
1.新建列表a=[],遍歷原列表
2.原列表元素不在新列表中,則將這個(gè)元素放進(jìn)新列表中
3.若新列表中存在原列表元素,則刪除新列表中的這個(gè)元素
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()創(chuàng)造一個(gè)無序不重復(fù)的元素集,然后利用原數(shù)組所有元素的和比新的元素集的兩倍少一個(gè)數(shù)的原理
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異或任何數(shù)不變,任何數(shù)與自己異或?yàn)?。a⊕b⊕a=b。異或滿足加法結(jié)合律和交換律。(俺也是看其他大佬的答案才知道還有這東西)這是各位大佬需要的資料
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for i in nums:
res = res ^ i
return res
各位大哥大姐求個(gè)贊??!