找單身狗數
乙個陣列中,只有兩個數字(定義為num1和num2)是出現了一次,其餘的數字都出現了兩次,我們要做的就是找出出現了一次的這兩個數。
思想:根據異或運算子的特性:
a(異或)b(異或)a = b;
0 (異或) a = a;
於是,我們可以將這個陣列的全部元素依次做異或運算,最終結果就是那個只出現一次的數字。
**:
```//找單身狗
//乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次。
#include
#define size(arr1) sizeof(arr1)/sizeof(arr1[0])
void
singledog
(int
*arr,
int len,
int*num1,
int*num2)
int j;
for(j =
0; j <
sizeof
(int)*
8; j++
)//int型別陣列的位元組數32
}for
(i =
0; i < len; i++
)else}}
intmain()
;int num1 =0;
int num2 =0;
singledog
(arr1,
size
(arr1)
,&num1,
&num2)
;printf
("%d %d"
, num1, num2)
;return0;
}
尋找單身狗數
方法一 異或求單身狗 原理 相同兩數異或為0 把所有數全部異或。異或的結果找1出現的位置的,然後將所有這個位置為1的數相異或,就是第乙個 單身狗 其他的相異或則是第二個。void finddog int arr,int n,int num for i 0 i 32 i for i 0 i n i v...
尋找單身狗
給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字 對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o n 2 其效率並不高,不宜採用。另一種方法也很容易想到,我們可以先對整個陣列排序,然...
D 最強單身狗
華中師範大學 2016 年 計蒜客杯 第十四屆程式設計競賽 d.最強單身狗 description 有若干只單身狗排成一排,編號從 l 到 r。gbx 發現,乙個單身狗的編號的二進位制中 1 的數量越多,表示該單身狗越強 就是單身越久咯 gbx想找到乙隻最強的單身狗和他做朋友 強者惺惺相惜吧 inp...