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

原创 2017年10月10日 19:59:09

这道题根据异或运算的性质:任何数和自己异或都等于0
用0依次和数组中的每个元素进行异或,出现两次的数字通过异或会相互抵消,最后剩下的就是只出现一次的数字。剩下的两个数不相等,异或的话至少有一位是为1的,二进制对应位也不相同。
1.得到0与数组中各元素依次异或的结果;
2.找到依次异或后的结果中为1的位置并标记,根据标记位是否为1进行分组;
2.将原数组分为两组,每组都含有一个只出现一次的数字,然后进行数组元素依次异或, 剩下的即为出现一次的数字。

int Num_Finding(int arr[], int size, int *num1, int *num2)
 {
     int i = 0;
     int tmp = 0;
     int flag = 0;
     for (i = 0; i < size; i++)
     {
         tmp ^= arr[i];
     }
     for (i = 0; i < 32; i++)
     {
         if (((tmp >> i) & 1 )!= 1)
         {
             flag++;//用flag标记为1的位置
         }
         else
         {
             break;
         }
     }
     for (i = 0; i < size; i++)
     {
         if (((arr[i] >> flag) & 1 )!= 1)
         {
             *num1 ^= arr[i];
         }
         else
         {
             *num2 = tmp^(*num1);
         }
     }
     return *num1, *num2;
 }
 int main()
 {
     int num1 = 0;
     int num2 = 0;
     int arr[] = { 1, 3, 4, 2, 4, 3 };
     int size = sizeof(arr) / sizeof(arr[0]);
     Num_Finding(arr, size, &num1, &num2);//需要对num1,num2返回所以这里选择传地址
     printf("%d %d\n", num1, num2);
     return 0;
 }
版权声明:本文为博主原创文章,未经博主允许不得转载。

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

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

【C语言】一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字!

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字!...
  • yaotengjian
  • yaotengjian
  • 2017年06月25日 18:39
  • 276

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

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

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

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字 分析: #define _CRT_SECURE_NO_WARNINGS 1  #include #include int...
  • baidu_37964071
  • baidu_37964071
  • 2017年06月01日 22:21
  • 116

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

从头到尾依次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或中全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说...
  • shine_zyd_way
  • shine_zyd_way
  • 2016年07月31日 22:40
  • 2724

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现看见这个问题,我们第一印象肯定是遍历,查找,这是最常规的方法了。 下面就是这种方法的代码了:#include #i...
  • jhcconan614
  • jhcconan614
  • 2016年11月15日 12:42
  • 1430

一个数组中,除了有两个数字只出现一次外,其他数字都出现两次,求出这两个出现一次的数字

求出两个只出现一次的数字 首先,我们知道两个相同的数字进行异或操作时为0,如果题目里面只有一个数字出现一次的话,我们就可以直接对数组中的所有数字进行异或操作,最后得到的数字就是单独出现的那个数字,但是...
  • u013412497
  • u013412497
  • 2016年08月12日 11:17
  • 795

一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字

首先来一道简单的题目:一个数组中,除了一个数字,其他数字都出现了两次,我们如何找出那个不同的数字, 很简单,将所有的数字都异或,那么最终结果就是要找的数字,因为相同的数字异或结果就是0 那...
  • changbaolong
  • changbaolong
  • 2013年09月26日 22:48
  • 2653

数组中除了两个数只出现过一次,其他的均出现过两次,请找出这两个只出现过一次的数

如题:数组中除了两个数只出现过一次,其他的均出现过两次,请找出这两个只出现过一次的数 例如:{10,9,8,7,6,6,7,8,9,10,5,5,4,3}; 4和3只出现过一次,请找出出现过一次的数。...
  • cxming007
  • cxming007
  • 2014年04月15日 13:09
  • 7174

一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。

一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是o(n),空间复杂度是o(1)。 要求:首先阐述主要思路,然后编写代码实现。 (盛大笔试...
  • tulun
  • tulun
  • 2011年09月20日 10:46
  • 4583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数
举报原因:
原因补充:

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