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

原创 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位分组的思想很好。


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

相关文章推荐

程序员面试宝典(34)-找出数组中两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:首先我们考虑这个问题的一个简单版本:一个数组里除...

九度OJ 1351:数组中只出现一次的数字 (位运算)

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3098 解决:906 题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这...

算法题6 找出整数数组中两个只出现一次的数字

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

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

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

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

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

40、数组中只出现一次的数字

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

码农小汪剑指Offer之38-数组中只出现一次的数字 异或运算的运用

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解题思路这道题,看上去没啥的,其实真实的很难,如果你从未接触过,一般情况下多数都是无法搞定这个问题的...

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

转自:http://blog.csdn.net/ewanyou/archive/2011/05/25/6445209.aspxhttp://www.cnblogs.com/aLittleBitCool...
  • FG2006
  • FG2006
  • 2011-06-23 15:44
  • 1126

数组中只出现一次的数字

一个整形数组里除了一个数字之外,其它数字都出现了两次,请写程序找出这一个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1). 如输入数组{2,4,3,6,3,2,5,5,6} ,只有4出...

剑指offer 40. 数组中只出现一次的数字

// 题目:输入一个递数组,所有数字都出现了两次出了两个数字之外,输出只出现一次的两个数字 //解法1:类似桶排序,时间O(n),空间O(n) public class Main { publi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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