17,226
社区成员




给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
以任意顺序返回这两个数字均可。
示例 1:
输入: [1]
输出: [2,3]
示例 2:
输入: [2,3]
输出: [1,4]
提示:
nums.length <= 30000
class Solution {
public int[] missingTwo(int[] nums) {
int index=0;
int []rec = new int[2];
int len = nums.length;
int c = 0;
for(int num:nums) c^=num;
for(int i=0;i<=len+2;i++) c^=i;
int lowBit = c&(-c); //因为要求的是两个不存在的数的异或
int a =0;
for(int num:nums) if((num&lowBit)!=0) a^=num;
for(int i=0;i<=len+2;i++) if((i&lowBit)!=0) a^=i;
rec[0]=a;
rec[1]=a^c;
return rec;
}
}