消失的两个数字
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
以任意顺序返回这两个数字均可。
class Solution {
    private int lowbit(int x) {
        return x & (-x);
    }
    public int[] missingTwo(int[] nums) {
        int n = nums.length + 2;
        int all = 0;
        for (int num : nums) {
            all ^= num;
        }
        for (int i = 1; i <= n; ++i) {
            all ^= i;
        }
        int lowbit = lowbit(all);
        int one = 0, two = 0;
        for (int num : nums) {
            if ((num & lowbit) != 0) {
                one ^= num;
            } else {
                two ^= num;
            }
        }
        for (int i = 1; i <= n; ++i) {
            if ((i & lowbit) != 0) {
                one ^= i;
            } else {
                two ^= i;
            }
        }
        return new int[]{one, two};
    }
}
    心之所向,素履以往 生如逆旅,一苇以航

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号