找單身狗數

2021-10-13 10:39:00 字數 871 閱讀 2686

找單身狗數

乙個陣列中,只有兩個數字(定義為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...