題目描述
乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
方法一:
# -*- 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所在的最低位,把數字分成兩半,每一半裡都還有只出現一...