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

2021-09-25 14:08:36 字數 850 閱讀 3373

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

思路:首先:位運算中異或的性質:兩個相同數字異或=0乙個數和0異或還是它本身

只有乙個數出現一次時,我們把陣列中所有的數,依次異或運算,最後剩下的就是落單的數,因為成對兒出現的都抵消了。

依照這個思路,我們來看兩個數(我們假設是ab)出現一次的陣列。我們首先還是先異或,剩下的數字肯定是a、b異或的結果,這個結果的二進位制中的1,表現的是a和b的不同的位。我們就取第乙個1所在的位數,假設是第3位,接著把原陣列分成兩組,分組標準是第3位是否為1。如此,相同的數肯定在乙個組,因為相同數字所有位都相同,而不同的數,肯定不在一組。然後把這兩個組按照最開始的思路,依次異或,剩餘的兩個結果就是這兩個只出現一次的數字。

**:

//num1,num2分別為長度為1的陣列。傳出引數

//將num1[0],num2[0]設定為返回結果

int length=array.length;

if(length==2)

int bitresult=0;

for(int i=0;i>=1;

index++;

}return index;

}private boolean isbit1(int target,int index)

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

1 乙個數字出現一次,其他數字出現兩次 兩個相同的數異或為0,所以將陣列裡的所有數依次異或,得到的結果就是只出現一次的數。include using namespace std int main int num 0 for int i 0 i 7 i cout 2 乙個數字出現一次,其他數字出現n次...

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

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。解法 首先考慮如果陣列中只有乙個數字出現一次,其他的數字都出現兩次,怎麼找出這個只出現一次的數字?這裡需要用到異或運算的性質 乙個數字 不管是什麼形式的數字,只要其二進位制形式確定 和其自身的異或運算的結果一...

《劍指offer》 陣列中只出現一次的數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。解法 1.了解幾個常識 a.了解兩個相同的數字異或結果為0 b.任何數字與0進行異或結果為數字本身 c.任何數字與1相與,只有最低位 右邊 為1時候,才等於1 2.一種對陣列分成兩組的方法,比如2 10 和3...