数组中只出现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;  
    }  

剑指offer:数组中只出现一次的数字(java)

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请些程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1).     如输入数组{2,4,3,6,3,2,5,...
  • abc7845129630
  • abc7845129630
  • 2016年10月06日 19:03
  • 1138

数组中,有三个数只出现1次,其他都出现2次,找出来那三个数。 3 Unique

问题:数组中,有三个数只出现1次,其他都出现2次。找出来那三个数。 注意:由于3是奇数,所以这三个数都相同的位异或起来也会是1。 思路:假设将数组中所有数异或起来之后。 假如某一位为0,说明所求...
  • luckyjoy521
  • luckyjoy521
  • 2014年03月20日 10:23
  • 1115

剑指Offer面试题40(Java版):数组出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。  * 请些程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1) 例如输入数组{2,4,3,6,3,2,5,...
  • jsqfengbao
  • jsqfengbao
  • 2015年08月10日 19:04
  • 1724

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

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

数组中出现一次的两个数 leetcode Single Number III

Given an array of numbers nums, in which exactly two elements appear only once and all the other e...
  • sinat_24520925
  • sinat_24520925
  • 2015年09月09日 11:28
  • 428

java 找出数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 算法如下:import java.util.HashMap; import java.util.It...
  • diu_brother
  • diu_brother
  • 2016年04月01日 21:00
  • 1565

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。 本题思路: 1.将0与数组每个元素依次亦或的结果就是两个只出现一次的元素亦或的值,相同元素的二进制位是相同的,...
  • qq_23556715
  • qq_23556715
  • 2016年08月19日 14:53
  • 1897

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

这个题如果换成数组中只出现一次的一个数字,就非常好做了,大家都知道这个题目如何做,其实数组中出现一次的数字有两个也可以使用异或的方式来处理,不过不能直接进行判断,需要分成两组,每一组含有一个只出现一次...
  • wretchedme
  • wretchedme
  • 2015年09月05日 21:05
  • 314

剑指offer面试题40-数组中只出现一次的数字

题目: 一个整形数组里除了两个数字意外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 要求时间复杂度是On,空间复杂度为O1 这个是上一篇 2016阿里巴巴java笔试题 的...
  • q291611265
  • q291611265
  • 2015年08月31日 13:51
  • 1344

找出数组中2个只出现1次的数,其他数都出现2次

问题表述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 按位异或相关知识: 按位异或性质:将数转化...
  • imxiaosong
  • imxiaosong
  • 2015年04月08日 09:41
  • 2095
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组中只出现1次的两个数字(百度面试题)
举报原因:
原因补充:

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