題目描述
乙個整形陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。例如陣列為,找出數字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...