您的位置:首页 > 其它

找出数组中两个只出现一次的数字

2017-01-13 19:54 232 查看
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

#define N 2

//二进制中第一个1
int getFirstOne(int num) {
int i = 0;
while (!(num & 1 << i)) {
i++;
}
return i;
}

int* find2Unique(int* arr, int len) {
int* result = new int
;
memset(result, 0, sizeof(int) * len);
int difOr = 0;
for (int i = 0; i < len; ++i) {
difOr ^= arr[i];
}
//第一个1就是2个数二进制中第一个不同的位,可用来分组
int difIndex = getFirstOne(difOr);
for (int i = 0; i < len; ++i) {
if (arr[i] & 1 << difIndex) {
result[0] ^= arr[i];
} else {
result[1] ^= arr[i];
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: