尋找單身狗

2021-07-07 09:13:32 字數 440 閱讀 5917

給出2 * n + 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字;

對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o(n^2),其效率並不高,不宜採用。

另一種方法也很容易想到,我們可以先對整個陣列排序,然後遍歷一次陣列,便可以找到那個單獨的書。其時間複雜度為o(nlogn)。是一種不錯的方法。

其實還有一種程式設計比以上兩種方法都容易,而且效率為o(n) 的方法。考慮到異或的特性,我們可以對陣列中每個元素進行異或。由於相同的元素進行異或就得0,而0與任意其他數字異或認識那個數字,並且異或運算遵循交換律,即a^b^c=a^c^b。所以該演算法成立。

如果存在兩個數字是單獨出現,而其他數字都是成對出現,找出這兩個數字,也可以採用異或的方法,這裡不做討論。

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...

初學C語言 14 尋找單身狗

輸入 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 si...