做效果图展板网站,wordpress恢复安装,制作网页中的链接怎么弄,河北建设集团园林网站1.找单身狗 #xff0c;一个数组中只有两个数字是出现一次#xff0c;其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。
在做这个题目之前要理解一个知识点#xff0c;
1、相同两个的数字异或得0 例如3^30
2、任何数字和0异或得数字本身 例如3^03#…1.找单身狗 一个数组中只有两个数字是出现一次其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。
在做这个题目之前要理解一个知识点
1、相同两个的数字异或得0 例如3^30
2、任何数字和0异或得数字本身 例如3^03#includestdio.h
int main()
{int arr[]{1,2,3,4,1,2,3,4,5};int szsizeof(arr)/sizeof(arr[0]);int ret0;for(int i0;isz;i){ret^arr[i];}printf(%d\n,ret);return 0;
}2、一个数组中只有两个数字是出现一次其他所有数字都出现了两次。 编写一个函数找出这两个只出现一次的数字。
根据第一个题目寻找单身狗是十分的容易的
如果这个能像第一个一样就好了寻找是十分的快的
有了这个想法想到了分组。#includestdio.h
int main(){int arr[]{1,2,3,4,5,1,2,3,4,6};//5和6是单个出现的int szsizeof(arr)/sizeof(arr[0]);//5的二进制是101//6的二进制是110//两个异或是 011//分组就是看哪一二进制位1 把二进制为1的分成1组 其余的为一组//比如按最后以为是1的进行一组//a组是11335//b组是22446//计算56的异或int ret0;for(int i0;isz;i){ret^arr[i];}//寻找哪一位的二进制为1int pos0;for(int i0;i32;i){if((reti)11){posi;break;}}//分组int num10;int num20;for(int i0;isz;i){if((arr[i]pos)11)num1^arr[i];elsenum2^arr[i];}return 0;
}