leetcode 劍指 Offer 56 - I. 陣列中數字出現的次數
阿新 • • 發佈:2021-06-21
一個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。
示例 1:
輸入:nums = [4,1,4,6]
輸出:[1,6] 或 [6,1]
示例 2:
輸入:nums = [1,2,10,4,1,4,3,3]
輸出:[2,10] 或 [10,2]
限制:
2 <= nums.length <= 10000
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
採用異或位運算。運算結果中選擇一個不為0的位置,把陣列分成兩組,分別再異或,為所求答案。
public int[] singleNumbers(int[] nums) { int item = 0; for (int num : nums) { item ^= num; } int n = 1; while ((item & n) == 0) { n <<= 1; } int a = 0; intb = 0; for (int num : nums) { if ((num & n) != 0) { a ^= num; } else { b ^= num; } } return new int[]{a, b}; }