【第22期】观点:IT 行业加班,到底有没有价值?

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

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


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

相关文章推荐

图像增强算法实现--图像的椒盐噪声、随机噪声、高斯噪声、均值滤波、中值滤波以及高斯滤波

(1)算法描述: 本程序为了更好地实现模块化的设计,将加噪声和滤波分成两个独立程序。 椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(s...

JAVA编程练手题

1:写一个方法(函数):判断一个单链表中是是否有环? 2:串行化的注意事项以及如何实现串行化? 3: 说说lucene中使用的设计模式,并举例。4: spring的容器的实际代表者是哪个类(接口),该类常见的子类有那些?5:假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

找出数组中是否有重复的数

找出数组中是否有重复的数2010-09-09 23:03:59|  分类: C&C++ |  标签:c   |字号大中小 订阅 数组a[N],1至N-1这N-1个数存放在a[N]中,其中某个数重复一次...

【100题】第六十六~第七十题(颠倒栈、扑克牌顺子和掷骰子概率、数字数组排成最小数、求旋转数组中最小值、全排列)

一,颠倒栈。 1)题目:用递归颠倒一个栈。例如输入栈<span style="color: bla
  • mmdev
  • mmdev
  • 2012-08-26 21:00
  • 318
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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