題目:乙個整型陣列裡除了兩個數字之外,其它的數字都出現了兩次。
請敲**找出這兩個僅僅出現一次的數字。
要求時間複雜度是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。也就是說,如...