您的位置:首页 > 编程语言 > C语言/C++

C语言 数组中只出现一次的值

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

#include<iostream>
using namespace std;

int findFirstBit1(int num){
int indexBit1 = 0;
while((num & 1) == 0 && indexBit1 < 32){
num = num >> 1;
indexBit1++;
}
return indexBit1;
}
bool isBit1(int num, int indexBit1){
num = num >> indexBit1;
return num & 1;
}
void findFirstAppearOne(int *arr, int length, int &num01, int &num02){
if(arr == 0 || length <= 0){
return ;
}
int result = 0;
for(int i=0; i<length; i++){
result ^= arr[i];
}
int indexBit1 = findFirstBit1(result);
for(int j=0; j<length; j++){
if(isBit1(arr[j], indexBit1)){
num01 ^= arr[j];
}else{
num02 ^= arr[j];
}
}
}

int main(){
int arr[8] = {
1, 2, 1, 3, 2, 4, 5, 5
};
int num01 = 0;
int num02 = 0;
findFirstAppearOne(arr, 8, num01, num02);
printf("%d\n", num01);
printf("%d\n", num02);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐