找出2n 1個數中不成對的那個

2022-04-06 11:33:03 字數 939 閱讀 7776

用o(n)複雜度搞定。

異或操作(^)——(對於操作)相同為0,相異為1.比如:1^0 = 1, 1 ^1=0

這樣:對於2,1,3,2,1, (2^2)^(1^1)^3=3.如此就能將不成對的3找出來。

異或具有交換律,所以可以按順序計算,2^1^3^2^1=3。

**如下:

#include #include 

#include

int a[7] = ;

intmain()

printf(

"%d\n

", ans);

return0;

}

問題公升級版:

(1)給出n個數,其中有且僅有乙個出現了奇數次,其餘的都出現了偶數次。用線性時間常數空間找出這個出現奇數次的數

(2)給定n個數,其中有且僅有兩個出現了奇數次,其餘的都出現了偶數次。用線性時間常數空間找出這兩個出現奇數次的數

對於問題1,就不解釋了。

對於問題2,

1.對所有的數異或一遍,得到的數肯定不為0,

2.在二進位制中從右向左找第乙個值為1的位置,也就是說這兩個出現奇數次的數的二進位制在此位置的值肯定不同,按照在這個位置的不同值(即0或1)將所有數分成兩組,分別異或運算,所得的結果就是這兩個出現奇數次的數。

#include #include 

#include

int a[6] = ;

intmain()

printf(

"%d %d\n

", ans1, ans2);

return0;

}

找出2n 1個數中不成對的那個

問題定義 有2n 1個數,只有乙個單著,別的都是成對的,找出這個單著的數。比如 2 1 3 2 1。3是答案。思路一 暴力搜尋 每個數都和其他數比較,找不到相同的,就得到了結果。時間複雜度為o n2 思路二 排序搜尋 先給序列排個序,之後從前往後一對一對的找,直到不是成對的為止。時間複雜度,怎麼也得...

找出2n 1個數中不成對的那個 公升級版

上篇談到了用異或來解決,確實是個好方法,時間複雜度為o n 比例一遍ok,空間複雜度為o 1 只占用乙個空間足矣。現在把這個問題公升級下 1 給出n個數,其中有且僅有乙個出現了奇數次,其餘的都出現了偶數次。用線性時間常數空間找出這個出現奇數次的數 2 給定n個數,其中有且僅有兩個出現了奇數次,其餘的...

找出2N 1個兩兩配對數中落單那個

對於這個問題,最暴力的求解方法是採用遍歷的操作,然後全部進行,以下方法使用了乙個輔助類,其原理是乙個智慧型容器,當插入元素的時候判斷集合中是否已經有了該元素,沒有就新增,有的話就刪除,如下 usr bin python def findsingle ls con container for i in...