《剑指offer》第五十六题I:数组中只出现一次的两个数字
// 面试题56(一):数组中只出现一次的两个数字 // 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序 // 找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 #include <cstdio> unsigned int FindFirstBitIs1(int num); bool IsBit1(int num, unsigned int indexBit); void FindNumsAppearOnce(int data[], int length, int* num1, int* num2) { if (data == nullptr || length < 2) return; int resultExclusiveOR = 0; for (int i = 0; i < length; ++i) //自反性, A XOR B XOR B = A XOR 0 = A resultExclusiveOR ^= data[i]; //因为有两个不同的数, 因此其结果二进制中必定有一位为1 //其中一个数字此位为1, 另一个必定为0. 1 XOR 0 = 1 unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR); *num1 = *num2 = 0; for