劍指offer 找到陣列中兩個只出現一次的數

2021-10-03 19:22:40 字數 806 閱讀 7078

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

這個題我本來打算用暴力來解決的,弄乙個dictionary,然後對每個數計數。

空間複雜度為o(1)

用異或,相同數字的異或為0,0與任何數異或 為任何數。 

這樣所有數異或的結果,為那兩個只出現一次的數

然後根據這個異或結果,找出兩個數 二進位制位不同的一位(只要找一位就好)

根據這個二進位制位分組,為0的在一組,為1的在一組。這樣兩個數字肯定被分到了不同組。而每一組裡面的數字,只有乙個只出現一次的數,其餘數都出現兩次.....不用說了,分別異或

class solution:

if len(array)<2:

return false

num = array[0] ^ array[1]

for i in range(2,len(array)):

num ^= array[i]

# 找到二進位制位不同的一位,只需要找出來一位就行

i = 1

while num%2 == 0:

num = int(num//2)

i += 1

# 按照上面找到的二進位制位分組異或

num1 = 0

num2 = 0

for num in array:

if num%(2**i) == (2**(i-1)):

num1 ^= num

else:

num2 ^= num

return num1,num2

劍指offer 合併兩個排序的陣列

1 題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。2 思路 運用遞迴 如果第乙個鍊錶為空,則直接返回第二個鍊錶 如果第二個鍊錶為空,則直接返回第乙個鍊錶 如果第乙個鍊錶中的值小於第二個鍊錶中的值,則將乙個鍊錶中的相應元素插入鍊錶 如果第乙個鍊錶...

劍指Offer 56 陣列中只出現一次的兩個數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。你可以假設這兩個數字一定存在。樣例輸入 1,2,3,3,4,4 輸出 1,2 class solution object def self,nums type nums list int rtype list...

劍指offer 陣列中只出現一次的兩個數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。中的類名 方法名 引數名已經指定,請勿修改,直接返回方法規定的值即可 param array int整型一維陣列 return int整型一維陣列 python 利用字典解決 class solution w...