初學C語言 14 尋找單身狗

2021-10-05 19:52:05 字數 1385 閱讀 9294

輸入:[ 1,2,3,4,5,2,1,3 ]

輸出:4 , 5

方法一:先對陣列進行排序,排序後進行相鄰的數字比較是否相同。圖示:

//氣泡排序}}

}void

finddog

(int

* a,

int n,

int* num )

else

//不相等,記錄第乙個資料,第二個為起始位置}}

intmain()

;int num[2]

=;int sz =

sizeof

(arr)

/sizeof

(arr[0]

);//元素個數

finddog

(arr,sz,num)

;printf

("%d %d "

, num[0]

,num[1]

);return0;

}方法二 :異或(兩數,相同為 0 ,相異為 1 ),整個陣列全部元素進行異或,出現兩次的元素異或為「0」,最後的結果不可能是零(否則沒有單身狗了,不可能,我就是單身狗),尋找陣列元素異或後二進位制為 1 的位置(區別),然後將該陣列分為兩組,一組該二進位制位全為 1 ,將陣列中該位為1的所有數異或,因為陣列中相同的數異或為0,僅留下該位為1的單身狗數;另外一組該位全為0,同理,該位為0的所有數異或,最後僅留下該位為0的單身狗數。

#include

void

finddog

(int a,

int sz,

int* num)

//尋找這兩個不同數異或結果的乙個位為 1 的位

for(pos =

0; pos <

32; pos++)}

for(i =

0; i < sz; i++

)//找到陣列中pos位為0的數,並進行異或

else}}

intmain()

;int num[2]

=;int sz =

sizeof

(arr)

/sizeof

(arr[0]

);finddog

(arr, sz, num)

;printf

("%d %d\n"

, num[0]

, num[1]

);return0;

}

尋找單身狗

給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字 對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o n 2 其效率並不高,不宜採用。另一種方法也很容易想到,我們可以先對整個陣列排序,然...

1040尋找單身狗

時間限制 1 sec 記憶體限制 128 mb 提交 159 解決 51 統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰 天下之婚牘耳。又問囊中何物,答曰 赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦,吳楚異鄉,此繩一系,終不可逭。...

尋找單身狗數

方法一 異或求單身狗 原理 相同兩數異或為0 把所有數全部異或。異或的結果找1出現的位置的,然後將所有這個位置為1的數相異或,就是第乙個 單身狗 其他的相異或則是第二個。void finddog int arr,int n,int num for i 0 i 32 i for i 0 i n i v...