void Find_data(int *arr,int len, int *data1, int *data2) { assert(arr); unsigned int ret = 0; for (int i = 0; i <len; i++) { ret ^= arr[i]; } int tmp1 = 1; int tmp2 = 1; int count = 0; while (1) { if ((ret&tmp1) != 0) { break; } tmp1 <<= 1; } *data1 = *data2 = 0; for (int i = 0; i < len; i++) { if (arr[i] & tmp1) { *data1 ^= arr[i]; } else { *data2 ^= arr[i]; } } } int main() { int arr[] = { 1, 1, 3, 3, 4, 4, 5, 5, 6, 6, 24, 19, 19, 36, 7, 7 }; int len = sizeof(arr) / sizeof(arr[0]); int data1, data2; Find_data(arr,len,&data1, &data2); printf("diff data : %d, %d\n", data1, data2); system("pause"); return 0; }
.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。
最新推荐文章于 2020-07-26 00:16:55 发布