leetcode 只出現一次的數字

2021-10-07 03:49:38 字數 2095 閱讀 4166

#第一種方案:自己寫的,主要的問題是沒有想到del之後的len(nums)是否=1,這個問題讓我思考了半天,為什麼會出現listerror,就很苦惱,以為一句判斷語句中不能出現多個del呢,方向錯了,幸好想出來了

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

count=

0 l=

len(nums)

nums.sort(

) temp=

while countiflen

(nums)!=1

:if nums[0]

== nums[1]

:del nums[1]

del nums[0]

count+=

2else

: count+=10

])del nums[0]

else:0

])count+=

1return temp[0]

執行用時:112 ms

記憶體消耗:14.8 mb

#第二種:直接計算個數

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

for i in nums:

if nums.count(i)==1

:return i

return

none

#第三種:把獨特的數都找出來*2 ,這樣就是所有的數都是兩份了,然後減去原本的陣列, 這樣多的那個就出來了

#執行用時 : 56 ms, 在single number的python3提交中擊敗了64.42% 的使用者

#可惜太侷限了

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

return2*

sum(

set(nums))-

sum(nums)

#第四種:用字典(hash)來計數

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

count =

for i in nums:

if i in count:

count[i]+=1

else

: count[i]=1

for i in count:

if count[i]==1

:return i

return

none

#第五種: 異或解法 : 數學定理 異或同乙個數兩次,原數不變

#交換律:a ^ b ^ c <=> a ^ c ^ b

#任何數於0異或為任何數 0 ^ n => n

#相同的數異或為0: n ^ n => 0

#a = [2,3,2,4,4]

#2 ^ 3 ^ 2 ^ 4 ^ 4等價於 2 ^ 2 ^ 4 ^ 4 ^ 3 => 0 ^ 0 ^3 => 3

#執行用時 : 88 ms, 在single number的python3提交中擊敗了11.25% 的使用者

#記憶體消耗 : 14.7 mb, 在single number的python3提交中擊敗了0.88% 的使用者

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

a =0for i in nums:

a = a ^ i

return a

主要來自於:

只出現一次的數

給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其他所有元素均出現兩次。找出只出現一次的那兩個元素。示例 給定 nums 1,2,1,3,2,5 返回 3,5 注意 結果的順序並不重要,對於上面的例子 5,3 也是正確答案。你的演算法應該具有線性複雜度,你能否僅使用恆定的空間複雜度來實現它...

只出現一次的數

問題描述 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。解決思路 將陣列中元素全部異或,根據異或特點,出現兩次的元素異或後結果為0,陣列全部異或之後的結果就是只出現一次的那個元素。實現 int singlenumber vector int n...

只出現一次的數

問題 有n個數,其中只有乙個數出現一次,其他的都出現兩次,求這個數 空間複雜度為常數 全部xor起來即可 include includeusing namespace std int main printf d n xor sum return 0 1231 3 1 51 2 3 2 3 inclu...