关闭

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

202人阅读 评论(0) 收藏 举报
#include 
#include 

void find(int a[], int sz)
{
	int i = 0;
	int num1 = 0;
	int num2 = 0;
	int num = 0;
	int flag = 0;
	for (i = 0; i < sz; i++)
	{
		num = num^a[i];
	}
	for (i = 0; i < 32; i++)
	{
		if (((num >> i) & 1) != 1)//找异或之后这个数字二进制数中最先出现的1的位置
		{
			flag++;
		}
		else
			break;

	}
	for (i = 0; i < sz; i++)
	{
		if (((a[i] >> flag) & 1) == 1)//分成2组
			num1 ^= a[i];
		else
			num2 ^= a[i];
	}
	printf("%d %d\n", num1, num2);
}
int main()
{
	int a[] = { 1, 1, 2, 2, 4, 3 };
	int sz = sizeof(a) / sizeof(a[0]);
	find(a, sz);
	system("pause");
	return 0;
}
0
0
查看评论

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

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

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

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

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

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字 分析: #define _CRT_SECURE_NO_WARNINGS 1  #include #include int find(int arr[], int sz,int *p1,int *p2) ...
  • baidu_37964071
  • baidu_37964071
  • 2017-06-01 22:21
  • 113

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

从头到尾依次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或中全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说在这个结果数字的二进制表示中至少就有一位为1。我们在结果数字中找到第一个为1的位的位置,记为第N位。...
  • shine_zyd_way
  • shine_zyd_way
  • 2016-07-31 22:40
  • 2714

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

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现看见这个问题,我们第一印象肯定是遍历,查找,这是最常规的方法了。 下面就是这种方法的代码了:#include<stdio.h> #include<stdlib.h>//找单独出现的数,一般方...
  • jhcconan614
  • jhcconan614
  • 2016-11-15 12:42
  • 1421

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

求出两个只出现一次的数字 首先,我们知道两个相同的数字进行异或操作时为0,如果题目里面只有一个数字出现一次的话,我们就可以直接对数组中的所有数字进行异或操作,最后得到的数字就是单独出现的那个数字,但是题目中给的是2个出现一次的数字,那我们尝试可以把这个数组拆分成两个数组,将两个出现一次的数字分到不同...
  • u013412497
  • u013412497
  • 2016-08-12 11:17
  • 784

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

首先来一道简单的题目:一个数组中,除了一个数字,其他数字都出现了两次,我们如何找出那个不同的数字, 很简单,将所有的数字都异或,那么最终结果就是要找的数字,因为相同的数字异或结果就是0 那么现在来思考这个题目: 《编程之美》一书提供了一种方法,即将所有的数字进行一个异或,得到一个数...
  • changbaolong
  • changbaolong
  • 2013-09-26 22:48
  • 2644

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

如题:数组中除了两个数只出现过一次,其他的均出现过两次,请找出这两个只出现过一次的数 例如:{10,9,8,7,6,6,7,8,9,10,5,5,4,3}; 4和3只出现过一次,请找出出现过一次的数。 首先想到的代码应该是上一个提到的遍历两次取出没有找到的相同的数字,代码如下: public st...
  • cxming007
  • cxming007
  • 2014-04-15 13:09
  • 7164

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

一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是o(n),空间复杂度是o(1)。 要求:首先阐述主要思路,然后编写代码实现。 (盛大笔试题) 考虑过程: 首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字
  • tulun
  • tulun
  • 2011-09-20 10:46
  • 4577

算法习题61:找出数组中两个只出现一次的数字:一个整型数组里除了两个数字之外,其他的数字都出现了两次

找出数组中两个只出现一次的数字 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度是 O(n),空间复杂度是 O(1)。 --------------------------------------------------------...
  • ylf13
  • ylf13
  • 2013-11-14 11:33
  • 1030
    个人资料
    • 访问:11034次
    • 积分:750
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条