消失的两个数字

链接

给定一个数组,包含从 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};
    }
}
posted @ 2021-10-14 23:32  Tianyiya  阅读(75)  评论(0)    收藏  举报