根据题目要求:
可以想到运用异或运算,任何一个数字异或它自己都等于0。
如果我们从头到尾依次异或数组中的每一个数,那么最终的结果就是那个只出现一次的数字,因为其他出现两次的数字全部在异或中被抵消为0了(异或运算遵循交换分配率)。
举个例子:2 3 4 2 3
所有数字依次异或运算:2 xor 3 xor 4 xor 2 xor 3 = (2 xor 2) xor (3 xor 3) xor 4= 0 xor 0 xor 4 = 4
最终结果4就是我们要找的那个只出现一次的数字。
注意:如果一个数字出现大于2得奇数次,则需要考虑其他情况;
class Solution { public: /** * * @param A int整型一维数组 * @param n int A数组长度 * @return int整型 */ int singleNumber(int* A, int n) { // write code here int result = A[0]; for (int i = 1; i < n; i++) { result ^= A[i]; if(result != 0) { break; } } return result; } };