有關陣列中出現不成對數字的例題解析

2021-08-11 10:00:16 字數 1440 閱讀 6283

1.一組資料中只有乙個數字出現了一次。其他所有數字都是成對出現的。

請找出這個數字。(使用位運算)

思路:可以將所有數字進行異或,因為相同數字異或之後結果為0,任何數與0異或得該數字本身。此題中將所有數字進行異或的結果就是需要找的那個數字。

具體實現如下:

#include 

#include

int main()

; int num = arr[0];

int i = 0;

for (i = 1; i < sizeof(arr) / sizeof(arr[0]);i++)

printf("different number is %d\n", num);

system("pause");

return

0;}

結果為:

2.乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次。

找出這兩個數字,程式設計實現。

思路:有了第一題的思路,很容易想到也應用異或來完成。首先同樣要將所有數字進行異或,此時異或的結果是陣列中兩不相同數字異或的結果,接下來只要將這兩個數字分離出來便可。

由異或的性質可知所得結果中位元位是0的表示該位相等,為1的表示該位不相等,所以我們可以根據指定位元位不同將其分組,此時兩不同數字肯定不在同一組,只需在第一組和第二組內進行整體異或便能將兩不同數字找出。

具體實現如下:

#include 

#include

#include

void find_different(int arr, int len)

int flag = 1;

i = 0;

while (i < 32)

i++;

}i = 0;

int data1 = 0;

int data2 = 0;

for (i = 0; i < len; i++) //根據指定位元位不同將其分組

else

}printf("different data= %d %d\n",data1, data2);

}int main()

; int len = sizeof(arr) / sizeof(arr[0]);

find_different(arr, len);

system("pause");

return

0;}

結果為:

陣列中出現一次的數字

題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 分析 我們可以先考慮乙個稍微簡單點的情況,乙個整型陣列裡除了乙個數字之外,其他的數字都出現了兩次。這是上面題目的乙個簡化版本。我們只要能解決這個問題了,然後將...

數字在排序陣列中出現的次數

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 統計乙個數字在排序陣列中出現的次數。輸入 每個測試案例包括兩行 第一行有1個整數n,表示陣列的大小。1 n 10 6。第二行有n個整數,表示陣列元素,每個元素均為int。第三行有1個整數m,表示接下來有m次查詢。1 m 10 ...

數字在排序陣列中出現的次數

題目 統計乙個數字下排序陣列中出現的次數。例如輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4。當然第一眼就能想到遍歷這個陣列然後統計這個陣列中某個數字出現的次數。當然第一眼就能想到的方法通常來說效率都不怎麼樣 再稍微想一下這個題目,是乙個已序的陣列,所以呢,不難想到二分查詢。我們可以...