//大致思路:如果是只有乙個出現一次的數字的話,直接全部異或求值最終剩下的就是所求,因為,異或的性質就是,a^a=0,a^0=a;
回到本題目,還是全部進行異或,因為有兩個出現一次的數字,所以異或完後剩下的數字就是兩個數字異或的值,那麼這個數字的
二進位制中肯定有乙個位是1,這也就表示這兩個出現一次的數字的二進位制表示中此位上是不同的,我們可以根據此特點將原陣列分開
也就是將這兩個數字分到不同的陣列中去,分別進行異或,這樣就可以得到這兩個數字。關於求哪個位上為1,我參考了乙個大神的
做法,就是乙個數與其負數做與運算,因為在機器中數字用二進位制表示,那麼正數的原碼,反碼補碼相同,但是負數不一樣,這樣,
正數與負數做與運算,就可以保留乙個1,其餘全部為0,那麼對於這個結果和其他數字做與運算,只要此位不為1,結果就是0;
class solution
bool isequal(int a,int b)
if(data.size()<2)
return;
int p=0;
*num1=0,*num2=0;
for(int i=0;i
陣列中兩個只出現一次的數字
題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。方法1 二話不說,直接雜湊 class solution for iif res data i 1 方法二 異或運算巧妙運用 可以用位運算實現,如果將所有所有數字相異或,則最後的結果肯定是那兩個只出...
找出陣列中兩個只出現一次的數字
題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是 o n 空間複雜度是 o 1 解題思路 這個題目的突破口在 題目為什麼要強調有乙個數字出現一次,其他的出現兩次?我們想到了異或運算的性質 任何乙個數字異或它自己都等於 0。也就是說,如...
找出陣列中兩個只出現一次的數字
問題描述 乙個陣列中除了兩個數字之外,其餘數字均出現了兩次 或偶數次 請寫出程式查詢出這兩個只出現一次的數字,要求時間複雜度為o n 空間複雜度為o 1 問題分析 這是一道很新穎的關於位運算的面試題。首先考慮這個問題的乙個簡單版本 乙個陣列中除了乙個數字之外,其餘的數字均出現兩次,請寫程式找出這個出...