乙個整型陣列裡除了乙個數字之外,其他的數字都出現了偶數次。請寫程式找出這個只出現一次的數字。
思路:位運算
對於相同的2個數 異或運算結果是0 那麼出現偶數次的數字按位異或的最終結果是0
而0與任何數做異或運算 結果還是那個數
由位運算交換律可知 對陣列所有數字做位運算的結果就是只出現一次的那個數字
//該方法找到陣列中只出現一次的那個數
int find(vectordata)
{int res=0;
for(int i=0;i高階:若陣列中除2個數字出現一次,其它數字均出現了偶數次,找出這2個數字
思路:
將所有數字按位異或的最終結果res是那兩個數字的異或結果 並且肯定不為0
找到該結果res中最低位1的位置 (可以用1不斷左移一位 與res 做按位與運算)
以該位置劃分原先陣列為2部分 那麼那2個數字一定分別位於這2部分內
呼叫之前的演算法 找出這2個數字
int res=0;
for(int i=0;ione;
vectorother;
for(int i=0;i
分組位運算 陣列中數字出現的次數(Go語言)
劍指offer56 i 預備知識 異或運算 和 運算 1 異或運算 因為 1 1 0 1 0 0 所以 4 4 100 100 000 即 a a 0 所以如果一組只有乙個數出現一次的時候全員異或一遍即可得到這個特殊的數 eg 3,1,3 3 1 3 1 2 運算1 1 1 1 0 0 0 0 0 ...
陣列中出現一次的數字
題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 分析 我們可以先考慮乙個稍微簡單點的情況,乙個整型陣列裡除了乙個數字之外,其他的數字都出現了兩次。這是上面題目的乙個簡化版本。我們只要能解決這個問題了,然後將...
陣列中兩個數字出現了一次,其餘的出現了兩次
從頭到尾依次異或陣列中的每乙個數字,那麼最終得到的結果就是兩個只出現一次的數字的異或結果。因為其他數字都出現了兩次,在異或中全部抵消掉了。由於這兩個數字肯定不一樣,那麼這個異或結果肯定不為0,也就是說在這個結果數字的二進位制表示中至少就有一位為1。我們在結果數字中找到第乙個為1的位的位置,記為第n位...