算法实现:
#include <stdio.h>
void find_diff_number(int arr[],int arr_len,int *pnumber1,int *pnumber2){
int i = 0;
int num1 = 0;
int num2 = 0;
int num = 0;
int flag = 0;
for (i = 0; i < arr_len; i++){
num ^=arr[i];
}
for (i = 0; i < 32 ; i++){
if (((num >> i) & 1) !=1){
flag++;
} else {
break;
}
}
for (i = 0; i < arr_len; i++){
if (1 == ((arr[i] >> flag) & 1)){
num1 ^=arr[i];
} else {
num2 ^=arr[i];
}
}
*pnumber1 = num1;
*pnumber2 = num2;
return;
}
算法验证:
/*********************************************************************************************
* Date : 2021/12/2 Thur
* Describe : Find two different number in one int arrary.
* Author : zhang hui
* ******************************************************************************************/
#include <stdio.h>
int main(){
int arr[]={1,1,2,2,3,3,4,4,5,7,6,6,8,8,9,9};
int len =sizeof(arr)/sizeof(int);
int num1 = 0;
int num2 = 0;
find_diff_number(arr,len,&num1,&num2);
printf("num1=%d,num2=%d\n",num1,num2);
return 0;
}
验证结果:
root@pekshcsitd24207:/mnt/disk/zh/project/test_zh# ./find_two_different_number_in_int_arrary
num1=7,num2=5