数组中只出现1次的两个数字(百度面试题)

转载 2013年12月03日 21:17:56
    // 百度面试题  
    //数组中除两个数字外,其它数字都出现了次。要求尽可能快的找出这两个数字  
    //By MoreWindows (http://blog.csdn.net/MoreWindows)  
    #include <stdio.h>  
    void FindTwoNotRepeatNumberInArray(int *a, int n, int *pN1, int *pN2)  
    {  
        int i, j, temp;  
          
        //计算这两个数的异或结果  
        temp = 0;  
        for (i = 0; i < n; i++)  
            temp ^= a[i];  
          
        // 找第一个为1的位  
        for (j = 0; j < sizeof(int) * 8; j++)  
            if (((temp >> j) & 1) == 1)  
                break;  
      
        // 第j位为1,说明这两个数字在第j位上是不相同的  
        // 由此分组即可  
        *pN1 = 0, *pN2 = 0;  
        for (i = 0; i < n; i++)  
            if (((a[i] >> j) & 1) == 0)  
                *pN1 ^= a[i];  
            else  
                *pN2 ^= a[i];  
    }  
    void PrintfArray(int a[], int n)  
    {  
        for (int i = 0; i < n; i++)  
            printf("%d ", a[i]);  
        putchar('\n');  
    }  
    int main()  
    {  
        printf("    白话经典算法系列之十二数组中不重复的个数字(百度面试题) \n");        
        printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");   
      
        const int MAXN = 10;  
        //int a[MAXN] = {1, 2, 7, 5, 100,  100, 6, 1, 2, 5};  
        int a[MAXN] = {1, 2, 3, 4, 1,  2, 3, 4, 0, 5};  
      
        printf("数组为: \n");  
        PrintfArray(a, MAXN);  
      
        int nNotRepeatNumber1, nNotRepeatNumber2;  
        FindTwoNotRepeatNumberInArray(a, MAXN, &nNotRepeatNumber1, &nNotRepeatNumber2);  
        printf("两个不重复的数字分别为: %d %d\n", nNotRepeatNumber1, nNotRepeatNumber2);  
        return 0;  
    }  

举报

相关文章推荐

数组中只出现1次的两个数字(百度面试题)

首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。     考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现...

【算法】数组中只出现1次的两个数字(百度面试题)

首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。     考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

数组中只出现一次的两个数字(百度面试题)

题目要求: 在一个数组中,其余数字都是成堆出现的,只有两个数字出现了一次。尽快找到这两个数字。 思路: 之前有过类似题,是一组数组中只有一个数字出现了一次,其余数字都是成对出现的。找到这个数字。...

数组中只出现1次的两个数字

首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。     考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现...

数组中只出现一次的数

1.数组中有一个数字只出现一次数组中有很多成对出现的数字,这些数字的顺序是随机出现的。但是里面有一个数字缺失,怎样用最快的方式将这一个数字找出来?由于只有一个数字是出现一次,其他都是成对出现的,所以此...

数组中只出现1次的两个数字

//问题描述:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。//数组中只出现一次的两个数字 //---------------------------------...

找出数组中两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析:这是一道很新颖的关于位运算的面试题。 首先...

找出数组中两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析:这是一道很新颖的关于位运算的面试题。 首先...

找出数组中两个只出现一次的数字

问题描述:一个数组中除了两个数字之外,其余数字均出现了两次(或偶数次)。请写出程序查找出这两个只出现一次的数字,要求时间复杂度为O(n),空间复杂度为O(1)。 问题分析:这是一道很新颖的关于位运算...

找出数组中两个只出现一次的数字

转自:http://blog.csdn.net/ewanyou/archive/2011/05/25/6445209.aspxhttp://www.cnblogs.com/aLittleBitCool...
  • FG2006
  • FG2006
  • 2011-06-23 15:44
  • 1090
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)