這個題如果換成陣列中只出現一次的乙個數字,就非常好做了,大家都知道這個題目如何做,其實陣列中出現一次的數字有兩個也可以使用異或的方式來處理,不過不能直接進行判斷,需要分成兩組,每一組含有乙個只出現一次的數字,
現在問題來了?
應該如何把這兩數字進行分開,而且每乙個陣列都要含有除了只出現一次數字其他數必須都要偶數個。
簡單的說要使用那兩個只出現一次的異或值,通過異或值我們能發現,在某一位上產生的1代表著這兩個只出現一次的數不一樣之處,我們可以使用這一位把兩個數字分成兩組,之後其他的數字自然就分開了。之後再分別給兩個陣列進行異或。之後就能求出來了。
思路給出了:
**如下:
#include #include #include #include using namespace std;
int main (void)
sum = arr[0];
for (i = 1;i < num;i++)
for (i = 1;i < sum;i = (i << 1))
} sum = i;
for (i = 0;i < num;i++)
else
} sum = fir[0];
for (i = 1;i < count1;i++)
printf ("%d ", sum);
sum = sec[0];
for (i = 1;i < count2;i++)
printf ("%d\n", sum);
} return 0;
}
上面的**我感覺實在是太長了,難看。。。。。
下面是別人寫的,短小精悍。。。自愧不如。。。
void findtwonotrepeatnumberinarray(int *a, int n, int *pn1, int *pn2)
陣列中只出現1次的兩個數字
乙個整型陣列裡除了2個數字分別出現1次之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 如果我們能把問題中的陣列分成2個子陣列,使得每個子陣列中都只有乙個唯一的元素以及很多成對的元素,那麼我們就可以求出每個子陣列中唯一的元素,最終就可以得到...
陣列中只出現一次的兩個數字
乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。你可以假設這兩個數字一定存在。樣例輸入 1,2,3,3,4,4 輸出 1,2 解決方案 異或 兩個相同的元素異或 設出現一次的數字分別為x和y 1,先用乙個sum 將整個陣列遍歷一遍同時異或該陣列元素與sum...
陣列中只出現一次的兩個數字
我們知道如果出現一次的數只有1個,其餘的都出現了兩次,那麼,直接異或一遍就可以了,但是,此題有2個 所以,異或一遍的結果為x y,即出現一次的兩個數異或的結果,從s x y 0,知道s的某位為1,x與y的在s為1的位不一樣,這樣就可以將數分為兩個集合,與s相同位為1的和s相同位為0的,x與y一定在兩...