温州模板建站代理,泉州网站建设学徒招聘,虚拟网站,校园网站建设管理题目#xff1a; 一个整型数组里除了两个数字之外#xff0c;其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路#xff1a; 因为只有两个只出现一次的数字#xff0c;所以所有数字进行异或之后得到值res一定不是0.这样#xff0c;res中其中至少1bit不是…题目 一个整型数组里除了两个数字之外其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路 因为只有两个只出现一次的数字所以所有数字进行异或之后得到值res一定不是0.这样res中其中至少1bit不是0我们根据这个bit是否为0把数组分为两组两个只出现一次的数字肯定在不同的组。其他出现两次的数组两个肯定在相同组而两个相同的数组异或之后是0任意一个数字与0异或还是该数字本身。 代码 class Solution {
public:void FindNumsAppearOnce(vectorint data,int* num1,int *num2) {if(data.size()1) return;int resdata[0];for(int i1;idata.size();i)resres^data[i];int kfind1Index(res);*num10;*num20;for(int i0;idata.size();i){if(kBitIs1(data[i],k))*num1(*num1)^data[i];else*num2(*num2)^data[i];}}
private:bool kBitIs1(int num, int k){return ((numk)1)!0;}int find1Index(int num){//找最右边的1的位数int k-1;while(num){k;if(num1){//k;这句应该不管if-else都要执行才对return k;}elsenumnum1;//不能只写成num1;}return k;}
}; 转载于:https://www.cnblogs.com/buxizhizhou/p/4764780.html