LeetCode每日一题136. 只出现一次的数字(异或)

154 阅读1分钟

地址:leetcode-cn.com/problems/si…

class Solution {
     public int singleNumber(int[] nums) {
        int sum = 0;
        for (int num : nums) {
            sum ^= num;
        }
        return sum;
     }
}

升级难度版

地址:leetcode-cn.com/problems/sh…

class Solution {
    public int[] singleNumbers(int[] nums) {
        int sum = 0;
        for (int num : nums) {
            sum ^= num;
        }
        //寻找最低位的1用来将两个数分到不同组
        int bit = 1;
        while ((bit & sum) != bit) {
            bit <<= 1;
        }
        int a = 0;
        int b = 0;
        for (int num : nums) {
            if ((num & bit) == bit) {
                a ^= num;
            } else {
                b ^= num;
            }
        }
        return new int[]{a, b};
    }
}