題目:乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次,找出這兩個只出現一次的數字。(要求:時間複雜度o(n))
#include
void
find1
(int
* a,
int n,
int* num)}}
//排序結果為1 1 2 2 3 4 5 5 6 6
int sign =0;
i =0;
int k =0;
while
(ielse}}
intmain
(void);
int num[2]
=;//想要找出兩個數,不能簡單的retutn,把陣列num的位址傳過去,即可修改num陣列內容,達到目的
int sz =
sizeof
(arr)
/sizeof
(arr[0]
);find1
(arr, sz, num)
;for
(i =
0; i <
2; i++
)return0;
}
#include
//異或法
void
find2
(int
*a,int n,
int* num)
//得到的結果必定不為0
//如
//5 0101
//6 0110
//^ 1011 (相同為0,不同為1)
//即根據ret異或的結果可知,ret每個二進位制為1的位置,所對應的兩位數字在此位置不同,
//可據此把兩位不同陣列分成兩撥,每一波全部異或,異或結果即為單身狗
int m =0;
while
(m <32)
int x1 =0;
int x2 =0;
for(i =
0; i < n; i++
)else}}
intmain
(void);
int num[2]
=;//想要找出兩個數,不能簡單的retutn,把陣列num的位址傳過去,即可修改num陣列內容,達到目的
int sz =
sizeof
(arr)
/sizeof
(arr[0]
);find2
(arr, sz, num)
;for
(i =
0; i <
2; i++
)return0;
}
如有錯誤,或有其他方法,歡迎各位前來指正。 尋找單身狗
給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字 對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o n 2 其效率並不高,不宜採用。另一種方法也很容易想到,我們可以先對整個陣列排序,然...
D 最強單身狗
華中師範大學 2016 年 計蒜客杯 第十四屆程式設計競賽 d.最強單身狗 description 有若干只單身狗排成一排,編號從 l 到 r。gbx 發現,乙個單身狗的編號的二進位制中 1 的數量越多,表示該單身狗越強 就是單身越久咯 gbx想找到乙隻最強的單身狗和他做朋友 強者惺惺相惜吧 inp...
1040尋找單身狗
時間限制 1 sec 記憶體限制 128 mb 提交 159 解決 51 統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰 天下之婚牘耳。又問囊中何物,答曰 赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦,吳楚異鄉,此繩一系,終不可逭。...