码迷,mamicode.com
首页 > 其他好文 > 详细

在一个数组中除两个数字只出现1次外,其它数字都出现了2次

时间:2014-07-03 10:33:52      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:blog   http   os   art   for   io   

前面总结了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");




}

 

 

 

在一个数组中除两个数字只出现1次外,其它数字都出现了2次,布布扣,bubuko.com

在一个数组中除两个数字只出现1次外,其它数字都出现了2次

标签:blog   http   os   art   for   io   

原文地址:http://www.cnblogs.com/hansongjiang/p/3818171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!