第六十一題(找出陣列中兩個僅僅出現一次的數字)

2021-09-07 11:47:49 字數 945 閱讀 6179

題目:乙個整型陣列裡除了兩個數字之外,其它的數字都出現了兩次。

請敲**找出這兩個僅僅出現一次的數字。

要求時間複雜度是o(n),空間複雜度是o(1)。

思路:先對全部資料進行異或得到結果result,兩兩同樣的資料異或結果為0。因此result為兩個僅僅出現1次的數字異或的結果,求得result左邊第乙個值為1的位,依據異或的性質可知,這兩個僅僅出現一次的數字該位上的值肯定不同,乙個為0,乙個為1。以此為標準。對整個陣列中的該位為1的數字進行異或。同樣的數字兩兩消去,得到的結果為該位為1的僅僅出現了一次的數字,同理求得還有乙個數字。

c++**:

#include "stdafx.h"

#includenamespace ms100p_61

result = 0;

for (int i = 0; i < length;i++)

if (data[i] & (1 << bitindex))

result = result^data[i];

cout << "one number is:" << result << endl;

result = 0;

for (int i = 0; i < length; i++)

if (!(data[i] & (1 << bitindex)))

result = result^data[i];

cout << "the other is:" << result << endl;

} void test()

; findtwosingle(a, 8); }}

int _tmain(int argc, _tchar* ar**)

執行結果:

找出陣列中僅僅乙個出現兩次的數

可以使用列表解析 count簡單實現 def get ele alist return i for i in alist if alist.count i 2 0 print get ele 1,2,3,1,1 乙個列表中只有乙個數字出現了一次,其他都出現了兩次,可以這麼寫,利用異或運算的性質 ge...

每日一題 9 請找出陣列中兩個只出現一次的數字

題目描述 乙個整形陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。例如陣列為,找出數字7和9。思路對陣列內每個數進行按位異或 因為相同的數字異或後為0,陣列中只有兩個數字出現一次,其餘都出現兩次,異或出來的結果一定不為0 得到異或出來的數字的二進位制位第乙個為1的...

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

題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是 o n 空間複雜度是 o 1 解題思路 這個題目的突破口在 題目為什麼要強調有乙個數字出現一次,其他的出現兩次?我們想到了異或運算的性質 任何乙個數字異或它自己都等於 0。也就是說,如...