如题所示:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
可以先考虑如果只有1个数字出现1次,其余都2次,怎么找:
思路
•对所有数字异或,由于异或满足结合律交换律,结果就是所要查找的数字
对于存在2个出现1次的数字:
•所有数字异或结果为这两个数字的异或值,如果能将数组分为2部分,每个数字属于其中一部分,则能求出这两个数字。可以找到这两个数字异或结果中第一个为1的位,根据该位将数组分成2个数组
源代码如下:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2)