概述
文章目录
- 1.序列中的数都出现过偶数次,只有一个数出现过奇数次,求此数
- 2.序列中的数都出现过偶数次,只有两个数出现过奇数次,求此数
- 3.序列中的数都出现过奇数次,只有一个数出现过1次,求此数
1.序列中的数都出现过偶数次,只有一个数出现过奇数次,求此数
该题运用了异或运算,一个数异或自己等于零,而异或零等于自己,且异或运算满足交换律。所以将序列成员依次异或,相同的数会异或成零,最后的结果就是出现奇数次的那个数。
int singleNumber(int* A, int n) {
// write code here
int res = A[0];
for(int i = 1;i<n;i++)
res ^= A[i];
return res;
}
2.序列中的数都出现过偶数次,只有两个数出现过奇数次,求此数
同上题,本题所求的是两个出现过偶数次的数,还是利用异或运算。设a和b是那两个出现奇数次的数,按上题的方法异或后,得到的值就是a^b。如1001与1011异或,得0010,为1的位即为两数值不同的位。
所以以这个为根据,如上例子,把序列分为两组,一组是第二位为1的数,而另一组是第二位为0的数。那么每组也就只有一个出现过奇数次的数了,转化为了题1的问题。
vector<int> getnum(vector<int> num){
int a = 0,a2 = 0;
vector<int> res;
for(int i = 0;i<num.size();i++)
a ^= num[i];
int rightone = a & (~a+1); //这是取右边第一个1的方法
for(int i = 0;i<num.size();i++)
if(num[i]&right!=0)
a2 ^= num[i];
res.push_back(a2);
res.push_back(a2^a);
return res;
}
3.序列中的数都出现过奇数次,只有一个数出现过1次,求此数
最后
以上就是斯文抽屉为你收集整理的关于题型:从序列中找出现次数为k的数(待完成)的全部内容,希望文章能够帮你解决关于题型:从序列中找出现次数为k的数(待完成)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复