知識遷移能力 陣列中只出現一次的數字

2021-09-13 09:08:18 字數 2232 閱讀 2276

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

知識點回顧:

思路:python實現:

// an highlighted block

class

solution

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

(self, array)

: # write code here

tmp =

for a in array:

if a in tmp:

tmp.

remove

(a)else

: tmp.

(a)return tmp

python實現2:

// an highlighted block

from collections import counter

class

solution

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

(self, array)

: # write code here

return

list

(self.

dc(array,0,

len(array)-1

))def dc

(self, array, start, end)

: res =

set(

)if start > end:

return res

if start == end:

return

set(array[start:end+1]

)

spl =

(start+end)/2

s1 = self.

dc(array, start, spl)

s2 = self.

dc(array, spl+

1, end)

return s1.

union

(s2)

.difference

(s1.

intersection

(s2)

)

python實現3(異或)

(1)對於出現兩次的元素,使用「異或」操作後結果肯定為0,那麼我們就可以遍歷一遍陣列,對所有元素使用異或操作,那麼得到的結果就是兩個出現一次的元素的異或結果。

(2)因為這兩個元素不相等,所以異或的結果肯定不是0,也就是可以再異或的結果中找到1位不為0的位,例如異或結果的最後一位不為0。

(3)這樣我們就可以最後一位將原陣列元素分為兩組,一組該位全為1,另一組該位全為0。

(4)再次遍歷原陣列,最後一位為0的一起異或,最後一位為1的一起異或,兩組異或的結果分別對應著兩個結果。

// an highlighted block

class

solution

:(self, array)

:if not array:

return

# 對array中的數字進行異或運算

tmp =

0for i in array:

tmp ^= i

# 獲取tmp中最低位1的位置

idx =

0while

(tmp &1)

==0: tmp >>=

1 idx +=

1 a = b =

0for i in array:

if self.

isbit

(i, idx)

: a ^= i

else

: b ^= i

return

[a, b]

def isbit

(self, num, idx)

:"""

判斷num的二進位制從低到高idx位是不是1

:param num: 數字

:param idx: 二進位制從低到高位置

:return

: num的idx位是否為1

""" num = num >> idx

return num &

1

陣列中只出現一次

首先看看題目要求 陣列a中,除了某乙個數字 x之外,其他數字都出現了三次,而 x出現了一次。請給出最快的方法找到x。這個題目非常有意思,在本人部落格中有 位操作基礎篇之位操作全面總結 這篇文章介紹了使用位操作的異或來解決 陣列中其他數字出現二次,而x出現一次,找出x。有 這邊文章介紹了分組異或的方法...

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...

陣列中只出現一次的數字

來自劍指offer 分析 如果整型陣列中只有乙個數字出現一次,我們只需將陣列中每個元素依次做異或操作,最終就得到了只出現一次的數字。因為自己與自己異或後,結果為0.現在,陣列中有兩個數字只出現一次,上述一次遍歷後將所有元素異或得不到那兩個數字。因此,我們試著將原陣列分成兩個子陣列,使每個子陣列中分別...