找出單身狗問題

2021-10-22 07:01:52 字數 1359 閱讀 1174

題目:乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次,找出這兩個只出現一次的數字。(要求:時間複雜度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 統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰 天下之婚牘耳。又問囊中何物,答曰 赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦,吳楚異鄉,此繩一系,終不可逭。...