演算法題 陣列中出現1次的兩個數

2021-08-07 11:52:20 字數 866 閱讀 4512

題目:乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。

思路:

1.乙個陣列中如果只有乙個單獨的數,其餘的都成對出現,求這個數,就將陣列中的每個數相異或就能得到單獨的數

2.乙個陣列中有兩個單獨的數,其餘的成對出現,將這些數相異或後,所得的數肯定不為0,所得的數最高位1是區分兩個數的重點,將原陣列分為兩個部分。

例如100^001=101最高位1將兩數區分,同時也將陣列中其餘數區分

3.求乙個數的最高位1是第幾位,將這個數左移幾位,直到為0(最高位是第n位)

4.判斷乙個數的第n位是否為1,將這個數與1的右移(n-1)位相與,判斷是否為0

#coding:utf-8

deffind_single_number

(a):

xor_result = 0

n = 0

num1 = 0

num2 = 0

for i in a:

xor_result ^= i

while xor_result:

xor_result = xor_result >> 1

n = n+1

for i in a:

if i & (1

<< n-1) ==0:

num1 ^= i

else:

num2 ^= i

return [num1,num2]

result = find_single_number([1,4,4,7,8,8])

print('single nums:',result)

陣列中只出現1次的兩個數字

乙個整型陣列裡除了2個數字分別出現1次之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 如果我們能把問題中的陣列分成2個子陣列,使得每個子陣列中都只有乙個唯一的元素以及很多成對的元素,那麼我們就可以求出每個子陣列中唯一的元素,最終就可以得到...

數字中出現1的個數

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數 從1 到 n 中1...

陣列中兩個數出現一次其餘出現兩次

有兩個數a b分別出現一次 其餘出現兩次 只要能找到乙個劃分乙個包含a 乙個包含b 對兩個分別使用找出出現一次的演算法 class solution public vectorsinglenumber vector nums int axorb 0 for int num nums axorb nu...