首页 > 代码库 > 在一个数组中除两个数字只出现1次外,其它数字都出现了2次
在一个数组中除两个数字只出现1次外,其它数字都出现了2次
前面总结了leecode上,改为成3出现,只有1个出现1次,的是通过记录每个位的个数来实现的如果count%3=1则为1,否则为0,实现起来充分利用了位运算。
编程之美上的,没有写过,今天写一下。
http://blog.csdn.net/morewindows/article/details/8214003这个博客是MVP的博客,我自己也写一遍,其实核心就是
两个数的异或为1,只有1,0疑惑才为1,所以分离这两个数到不同的区间。对如何寻找1的位置做了优化(x&-x)
#include<iostream>using namespace std;int main(){ int a[]={3,4,3,4,5,5,7,7,8,9}; int len=sizeof(a)/sizeof(int); int ans0=0; //所有数的亦或 int ans1=0; int ans2=0; for(int i=0;i<len;i++) { ans0^=a[i]; } cout<<ans0<<endl; ans0=ans0&(-ans0); //求的ans0最低位1的位置的权重 搜索x&-x的作用 cout<<ans0<<endl; for(i=0;i<len;i++) { if(ans0&a[i]) { ans1^=a[i]; } else { ans2^=a[i]; } } cout<<"the first "<<ans1<<endl; cout<<"the seconde "<<ans2<<endl; system("pause");}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。