数组中值只出现一次的数字

原创 2016年05月31日 15:05:14

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

#include "iostream"

using namespace std;

//以异或后第x位是否为1分为两组,分别找出只出现一次的数
void FindNumsAppearOnce(int a[], int n)
{
	if (a == NULL || n <= 1)
		return;

	int res = 0;
	for (int i = 0; i < n; ++i)
		res ^= a[i];
	
	int firstOf1Bit = 1;
	while (true)
	{
		if ((res >> firstOf1Bit) & 0x01)
			break;
		firstOf1Bit++;
	}

	int result1 = 0;
	int result2 = 0;

	for (int i = 0; i < n; i++)
	{
		if ((a[i] >> firstOf1Bit) & 0x01)
			result1 ^= a[i];
		else
			result2 ^= a[i];
	}

	cout << result1 << " " << result2 << endl;
}

void test()
{
	int a[] = { 1, 3, 2, 2 };
	FindNumsAppearOnce(a, sizeof(a) / sizeof(int));
}

int main()
{
	test();
	return 0;
}


利用bit位分组的思想很好。


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

经典算法题1:找出数组中只出现一次的数字,其它数字都出现了两次

一个整型数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。...
  • u011826264
  • u011826264
  • 2014年09月14日 13:19
  • 3923

数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次

本文地址:http://blog.csdn.net/morewindows/article/details/12684497转载请标明出处,谢谢。 欢迎关注微博:http://weibo.com...
  • baoendemao
  • baoendemao
  • 2014年10月09日 09:59
  • 2051

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

题目:一个整型数组里除了两个数字之外,其他的数字都出现两次。请找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度O(1)。 看到这个问题,我们首先应该想到另一个问题,如果数组中只有一个...
  • L_XRUI
  • L_XRUI
  • 2016年06月14日 22:40
  • 529

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

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

【LeetCode】- Single Number(从数组中找出只出现一次的数字)

[Single Number] Given an array of integers, every element appears twice except for one. Find that...
  • zdp072
  • zdp072
  • 2014年01月01日 21:00
  • 1958

第六十一题(找出数组中两个只出现一次的数字)

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析:乍眼看上去,...
  • u013140542
  • u013140542
  • 2014年07月04日 18:00
  • 667

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

/* 数组中只出现一次的数字: 一个整型数组里除了两个数字之外,其他的数字都出现了两个,请写程序找出这两个只出现一次的数字。要求时间 复杂度是O(n),空间复杂度是O(1) 分析: 直接遍历,统计次数...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2014年09月10日 22:01
  • 571

程序员面试题精选100题(34)-数组中只出现一次的数字[算法]

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

剑指Offer——(40)数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...
  • kongkongkkk
  • kongkongkkk
  • 2017年07月25日 14:51
  • 120
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组中值只出现一次的数字
举报原因:
原因补充:

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