问题一:数组中只出现一次的两个数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
源码:
(num&1)记得打括号,记得打括号,记得打括号。重要的事情说三遍。
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int nlength = data.size();
if(nlength<2) return;
int sum = 0;
for(int i=0; i<nlength; i++){
sum ^= data[i];
}
int index = findfirst(sum);
// num1=num2=0;
for(int i=0; i<nlength; i++){
if(isbit(data[i], index))
*num1 ^= data[i];
else
*num2 ^= data[i];
}
}
int findfirst(int num){
int index=0;
while((num&1)==0){
num = num>>1;
index++;
}
return index;
}
bool isbit(int num, int index){
num = num>>index;
return (num & 1)==1;
}
};
第二题《数组中唯一只出现一次的数字》在牛客网上没有练习窗口,以后找到会补上。
来源:CSDN
作者:凡凡.cs
链接:https://blog.csdn.net/fanyuwgy/article/details/104117269