void FindNumsAppearOnce(int data[], int length, int* num1, int* num2) { if (data == NULL || length < 2) return; int resultExclusiveOR = 0; for (int i = 0; i < length; ++ i) resultExclusiveOR ^= data[i]; unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR); *num1 = *num2 = 0; for (int j = 0; j < length; ++ j) { if(IsBit1(data[j], indexOf1)) *num1 ^= data[j]; else *num2 ^= data[j]; } }
void FindTwoNumsAppearOnce(int *arr,int len,int *num1,int *num2) { int i; int AllXOR = 0; //全部异或 for(i=0;i<len;i++) AllXOR ^= arr[i]; int res = FindFirstBit1(AllXOR); *num1 = *num2 = 0; for(i=0;i<len;i++) { if(IsBit1(arr[i],res)) *num1 ^= arr[i]; else *num2 ^= arr[i]; } }