剑指Offer-58数组中数字出现的次数

public int[] singleNumbers(int[] nums) {
    int x = 0, y = 0, n = 0, m = 1;
    // 遍历异或
    for(int num : nums) {
        n ^= num;
    }
    // 循环左移,计算 m
    while((n & m) == 0) {
        m <<= 1;
    }
    // 遍历 nums 分组
    for(int num: nums) {
        if((num & m) != 0) {
            x ^= num;
        } else {
            y ^= num;
        }
    }
    return new int[] {x, y};
}

猜你喜欢

转载自blog.csdn.net/a792396951/article/details/114284985