Q40 陣列中只出現一次的數字 位運算

2021-10-04 07:29:54 字數 1528 閱讀 2029

題目描述

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

方法一:

# -*- coding:utf-8 -*-

class

solution

:# 返回[a,b] 其中ab是出現一次的兩個數字

def(self, array)

:# write code here

res =

for num in array:

if num in res:

res.remove(num)

else

:return res

方法二:位運算

位運算中異或的性質:兩個相同數字異或=0,乙個數和0異或還是它本身。

當只有乙個數出現一次時,我們把陣列中所有的數,依次異或運算,最後剩下的就是落單的數,因為成對兒出現的都抵消了。

根據異或的結果1所在的最低位,把數字分成兩半,每一半裡都還有只出現一次的資料和成對出現的資料 這樣繼續對每一半進行異或則可以分別求出兩個只出現一次的數字

python 位運算

&是按位邏輯運算子,比如5 & 6,5和6轉換為二進位制是101和110,此時101 & 110=100,100轉換為十進位制是4,所以5 & 6=4

|是按位或邏輯運算子,比如5|6,就是101|110,得到111=7,所以最後結果為7

是按位異或邏輯運算子,比如56,其實是101110,結果是011,所以56的答案是3

python bin() 函式

>>

>

bin(10)

'0b1010'

>>

>

bin(20)

'0b10100'

解題**:

# -*- coding:utf-8 -*-

class

solution

:# 返回[a,b] 其中ab是出現一次的兩個數字

def(self, array)

:# write code here

num =

0for i in array:

num ^

=i #陣列中的數字相異或 得到兩個出現一次數字的異或結果

first =

0while first&num==0:

#得到異或第乙個1出現的位置 也就是兩個數字出現不同的首個位置

first+=

1 result=[0

,0]for item in array:

if item&first==0:

result[0]

^=item

else

: result[1]

^=item

return result

方法三:

count算次數 次數為1的輸出

40 陣列中只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。異或的方法。先考慮乙個簡單一點的問題,陣列裡除了乙個數字以外,其它都出現兩次,找到這個數字。這個題之前遇到過,做法是把陣列裡所有數字異或,最後得到的數字就是只出現一次的那乙個數字。為什麼是這樣呢?因...

40 陣列中只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。思路 1.利用map,map儲存的是key value對,在這裡key是陣列中的數字,value是陣列中數字出現的次數。遍歷陣列,將數字存入map,那麼map中value為1的兩個數字就是陣列中的...

40 陣列中只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。class solution 可以用位運算實現,如果將所有所有數字相異或,則最後的結果肯定是那兩個只出現一次的數字異或的結果,所以根據異或的結果1所在的最低位,把數字分成兩半,每一半裡都還有只出現一...