乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次。
找出這兩個數字,程式設計實現。
想要完成該題目的要求首先要有明確的思路:
1、用異或實現。因為異或簡單快捷。
2、先將所有的陣列元素逐個異或,所得到的結果為兩個只出現一次的數字異或之後的結果並存入result中(出現兩次的數字異或之後結果均為0)。
3、再通過標誌位flag的左移操作將result中的乙個1的位置找出,因為兩數相異或的結果為1所在的位,在該位兩數的二進位制必然不同。
4、最後再通過flag迴圈遍歷陣列將陣列分成兩組,即通過flag為1的那個二進位制位將陣列裡只出現一次的兩個數字分開。(相同的數字必然出現在同一組)
具體實現:
#include#include#includevoid foundnums(int* num,int len)
while (result)
flag <<= 1;
} for (i = 0; i < len; i++) //將num中的所有數字分兩組 即通過if和else將date1和date2分開
else
}printf("%d %d",date1,date2 );
}int main()
; int len = sizeof(num)/sizeof(num[0]);
foundnums(num,len);
return 0;
}
結果:
演算法(一) 求集合中重複出現或者不重複出現的數值
求法一 利用異或 兩個相同的數進行異或,結果為0 將集合中所有的元素進行異或運算,得到的結果為最終的唯一重複的數或者唯一不重複的數,原因 a b c d a c b a a b b c c d d,例子 乙個集合中只有乙個數是只出現一次,其他數出現兩次 public intsinglenumber ...
統計 去重,找出重複,出現次數最多的字母
只找到是哪幾個重複的元素 const finddup list return result 找到重複的元素,並得到有幾個 1 使用reduce方法,reduce本來就有統計的含義 const finddupsnumber list else return total 1 直接遍歷,結果陣列沒有,存入...
找出數字中唯一乙個出現奇數次數的數字,異或
輸入一行數字,其中有且只有乙個數字出現了奇數次,其餘數字均出現偶數次,找出該數字並輸出 從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。因為,兩次異或同乙個數,結果不變,且異或運算滿足交換律。include includeusing namespace std int main cout f...