找出数组中2个只出现了一次的数字
2011-08-28 22:20
351 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
#include <stdio.h>
int main() {
int a[] = {1, 2, 0, 2, 1, 9, 3, 9, 0, -1};
int number1 = 0, number2 = 0;
int i = 1, tmp = a[0], index = 0;
for (; i < sizeof(a)/sizeof(a[0]); ++i) { //得出 3 ^ -1
tmp ^= a[i];
}
number1 = tmp;
number2 = tmp;
while (tmp) { //找出tmp从右数第一个为1的位置
if (1== (tmp & 1)) {
break;
}
++index;
tmp >>= 1;
}
for (i = 0; i < sizeof(a)/sizeof(a[0]); ++i) { //以index位为1将数组分成两部分,每部分只含有一个只出现一次的数字
if (1 == ((a[i] >> index) & 1)) { //得到一个
number1 ^= a[i];
}
else { //得到另外一个
number2 ^= a[i];
}
}
printf("%d %d\n", number1, number2);
return 0;
}
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
#include <stdio.h>
int main() {
int a[] = {1, 2, 0, 2, 1, 9, 3, 9, 0, -1};
int number1 = 0, number2 = 0;
int i = 1, tmp = a[0], index = 0;
for (; i < sizeof(a)/sizeof(a[0]); ++i) { //得出 3 ^ -1
tmp ^= a[i];
}
number1 = tmp;
number2 = tmp;
while (tmp) { //找出tmp从右数第一个为1的位置
if (1== (tmp & 1)) {
break;
}
++index;
tmp >>= 1;
}
for (i = 0; i < sizeof(a)/sizeof(a[0]); ++i) { //以index位为1将数组分成两部分,每部分只含有一个只出现一次的数字
if (1 == ((a[i] >> index) & 1)) { //得到一个
number1 ^= a[i];
}
else { //得到另外一个
number2 ^= a[i];
}
}
printf("%d %d\n", number1, number2);
return 0;
}
相关文章推荐
- 找出数组中2个只出现一次的数字
- 找出数组中只出现一次的2个数字
- 算法:数组找出2个只出现一次的数字(其他元素出现两次)
- 找出数组中两个只出现一次的数字!
- 找出数组中两个只出现一次的数字
- 面试题:找出数组中只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 一个整型数组里除了一个数字之外,其他的数字都出现了两次,找出出现一次的数字
- 找出数组中只出现一次的2个数
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。
- 找出数组中两个只出现一次的数字--分组异或
- 1.求第n个斐波那契数(非递归实现)。 2.一个数组中只有两个数字是出现一次,其他所有数字都出现 了两次。 找出这两个数字,编程实现。
- 找出数组中两个只出现一次的数字
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
- 找出数组中只出现一次的数字
- 找出数组中两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 100题_34 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字