zoukankan      html  css  js  c++  java
  • 求整数数组里的两个非重复整数

    问题:一个整数数组里除了两个数之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n), 空间复杂度为O(1).(2012百度)

    #include<iostream>
    using namespace std;
    
    int findFirst1(int num)
    {
    	int n=0;
    	while((num&1)==0&&n<32)
    	{
    		num=num>>1;
    		n++;
    	}
    	return n;
    }
    bool is_1(int num, int count)
    {
    	num=num>>count;
    	return (num&1);
    }
    void FindNumsAppearOnce(int A[],int length, int &num1, int &num2)
    {
    	if(length<2)return;
    	int res=0;
    	for (int i=0;i<length;i++)
    	{
    		res^=A[i];
    	}
    	int count=findFirst1(res);
    	for (int i=0;i<length;i++)
    	{
    		if (is_1(A[i], count))
    		{
    			num1^=A[i];
    		} 
    		else
    		{
    			num2^=A[i];
    		}
    	}
    }
    int main()
    {
    	int A[]={1, 2, 7, 8, 1, 7, 10, 5, 8, 10};
    	int n=sizeof(A)/sizeof(int);
    	int num1=0, num2=0;
    	FindNumsAppearOnce(A, n, num1, num2);
    	cout<<"num1="<<num1;
    	cout<<"num2="<<num2;
    	return 0;
    }
    

      

  • 相关阅读:
    Django框架简介
    前端之Bootstrap
    前端之JQuery
    前端之BOM和DOM
    前端知识之js
    前端知识之CSS
    假期学习总结2-10
    假期学习总结2-9
    假期学习总结2-8
    假期学习总结2-7
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4456167.html
Copyright © 2011-2022 走看看