每日一題 9 請找出陣列中兩個只出現一次的數字

2021-10-03 10:41:01 字數 917 閱讀 2813

題目描述

乙個整形陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。例如陣列為,找出數字7和9。

思路對陣列內每個數進行按位異或( ^ )[因為相同的數字異或後為0,陣列中只有兩個數字出現一次,其餘都出現兩次,異或出來的結果一定不為0]

得到異或出來的數字的二進位制位第乙個為1的位數(右–>左)

將陣列中的數按照這個位數是否為1分為兩種情況分別異或,得到兩個數字

**如下:

#include

intfindnumberbit

(int num)

return indexbit;

}void

(int

* arr,

int len,

int* num1,

int* num2)

index_1 =

findnumberbit

(result)

;for

(i =

0; i < len; i++)}

intmain()

;int len =

sizeof

(arr)

/sizeof

(arr[0]

);int num1 =

0, num2 =0;

(arr, len,

&num1,

&num2)

;printf

("陣列中只出現一次的數字為:%d, %d"

, num1, num2)

;return0;

}

**生成圖

每日一題 合併兩個有序陣列

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素。輸入...

每日一題 找出陣列中的幸運數

在整數陣列中,如果乙個整數的出現頻次和它的數值大小相等,我們就稱這個整數為 幸運數 給你乙個整數陣列 arr,請你從中找出並返回乙個幸運數。如果陣列中存在多個幸運數,只需返回 最大 的那個。如果陣列中不含幸運數,則返回 1 示例 1 輸入 arr 2,2,3,4 輸出 2 解釋 陣列中唯一的幸運數是...

每日一題之找出兩個單獨出現的數字

題目 讀入2n個數字,其中,除了有兩個數字是單獨出現外,剩下任何乙個數字出現次數都是偶數個,請寫出演算法找出這兩個數字並輸出 讀入樣例 81 3 4 5 9 1 4 3 輸出 5 9 思路1 看到這道題目,第一反應就是for迴圈列舉一遍,然後統計每個數字出現的次數,最後輸出出現次數是奇數次的 map...