1. 程式人生 > 其它 >leetcode 劍指 Offer 56 - I. 陣列中數字出現的次數

leetcode 劍指 Offer 56 - I. 陣列中數字出現的次數

一個整型陣列 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;
        int
b = 0; for (int num : nums) { if ((num & n) != 0) { a ^= num; } else { b ^= num; } } return new int[]{a, b}; }