• 在一个数组中除两个数字只出现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");
    
    
    
    
    }
    
  • 相关阅读:
    type和object详解
    元类+单例
    单表查询和多表查询
    外键
    存储引擎,MySQL中的数据类型及约束
    壹拾壹




  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3818171.html
Copyright © 2020-2023  润新知