給定是一個整數數組。陣列中的每個數字都會出現奇數次,但只有1個數字出現偶數次。找到那個號碼。查找偶數次重複數組中的整數,其餘整數重複奇數次
下面是我在stackoverflow上讀取的解決方案不起作用。我無法找到該解決方案的鏈接,我想知道是否有人可以幫助我理解爲什麼這個解決方案不正確,除非我在下面做錯了什麼。
我們首先對數組中的所有元素進行異或運算。我們稱之爲aWithOutDuplicate
,其中包含除重複之外的所有奇怪元素。然後我們或所有的元素。我們稱之爲aAllUnique
,它應該包含所有的獨特元素。 XORing aWithOutDuplicate
和aAllUnique
應該吐出重複的元素。
int arr[] = {1,2,3,4,5,6,7,8,4,9};
int aWithOutDuplicate = 0;
int aAllUnique = 0;
for(int i=0;i<arr.length;i++) {
aWithOutDuplicate ^= arr[i];
aAllUnique |= arr[i];
}
cout << (aWithOutDuplicate^aAllUnique);
更新: 我不知道這個問題可以在O(n)時間和O(1)空間複雜度來解決。
你錯了。不重複{1,2,3,5,6,7,8,9}。 {4}重複一次。一個是奇數。或者你的意思是:「找到**發生的次數**偶數次」? – wildplasser
爲了簡單起見,我舉了一個例子。我重複說的意思是這個數字的出現次數。考慮到這個定義,只有4次出現偶數次(2次)並且休息奇數次(在本例中爲1次)。 – Kay
我認爲wildplasser所說的是,重複一個數字會使所有的出現在集合中彼此相鄰。然而,我不認爲「重複」一詞的定義要求。 –