算法实现:
#includevoid 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; }
算法验证:
#includeint 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=%dn",num1,num2); return 0; }
验证结果:
root@pekshcsitd24207:/mnt/disk/zh/project/test_zh# ./find_two_different_number_in_int_arrary num1=7,num2=5



