题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:这道题的简单版本是除了一个数字之外,其他数字都出现了两次,这个很简单,将所有的数异或一遍就得到了那个数字。如果不考虑空间复杂度的话,通过hash表统计的方法可以得到这两个数字;但如果空间复杂度要求...
分类:
编程语言 时间:
2015-07-26 22:16:34
阅读次数:
169
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:自己对知识使用的灵活性不够...如果只有一个只出现一次的数字直接异或就可以了,但两个怎么办呢?后来看得答案:先异或一遍最后的数字是这两个不一样的数字异或的结果。那么这个异或数字为1的位一定是这两个数字不...
分类:
编程语言 时间:
2015-07-24 12:45:00
阅读次数:
132
称号:除了外面两个数字为整数数组。其他人物都出现两次。请敲代码,找了两个数字只出现一次。它需要的时间复杂度O(n),空间复杂度是O(1)。或深足够的认识。 要思路还是之前的数组中仅仅出现一次的数字的那种模式,一次遍历加上异或运算。那么这个异或的值肯定是这两个仅仅出现一次的数字的相异或...
分类:
编程语言 时间:
2015-07-22 14:34:36
阅读次数:
116
void FindNumsAppearOnce(int data[], int length, int* num1, int* num2)
{
if (data == NULL || length
return;
int resultExclusiveOR = 0;
for (int i = 0; i
resultExclusiveOR ^= data[i];
unsigned ...
分类:
编程语言 时间:
2015-07-11 09:18:58
阅读次数:
251
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。我们想到异或运算的一个性质:任何一个数字异或它自己都等于0。也就是说, 如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些成对出现两次的数字全部在异或中抵消了。...
分类:
编程语言 时间:
2015-07-06 12:21:17
阅读次数:
139
Description: Given an array of integers, every element appears three times except for one. Find that single one.只有一个出现一次的数字,其他的都出现了3次,找出出现一次的那个数字。pub....
分类:
其他好文 时间:
2015-06-28 00:02:00
阅读次数:
111
在一个长度为n的整形数组a里,除了三个数字只出现一次外,其他的数字都出现了2次。请写程序输出任意一个只出现一次的数字,程序时间和空间复杂度越小越好。 例如: a = {1,3,7,9,5,9,4,3,6,1,7},输出4或5或6。解题思路
如果只有一个只出现一次,将所有数做异或运算,返回其值。
如果有两个数只出现一次,假设为a和b,全部数做异或运算的结果为x=a^b,由于a和b不相等,所以x不为0。...
分类:
移动开发 时间:
2015-06-23 20:09:43
阅读次数:
149
题目要求:给出一个数组,只有一个数字出现一次,其他的都出现两次,找出那出现一次的数字,要求用线性的时间解出题目!
分析:因为题目要求的是用线性时间,所以类似于那种暴力解决的方法会超时,如下面这种:int singleNumber2(int *nums,int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(nu...
分类:
其他好文 时间:
2015-06-02 18:03:54
阅读次数:
120
先预处理出两个个数组pre,next。pre[i]表示上一个与i位置数字相同的位置,若不存在则设为0;next[i]表示下一个与i位置数字相同的位置,若不存在则设为n+1。那么一个满足在区间[L,R]中只出现一次的数字,其pre[i]R。 这样我们可以先将pre进行排序,然后将pre可持久化,...
分类:
其他好文 时间:
2015-05-27 13:40:16
阅读次数:
119
一个数组中只有一个数字出现一次,其余别的数字都出现两次,如何求出这个出现一次的数字?例如数组a[11]={1,2,2,3,3,4,4,5,5,6,6},则出现一次的是1,通过异或算法即可求出.
代码如下:
int onediffent(int a[],int n)
{
int temp=0;
for(int i=0;i<n;i++)
temp=temp^a[i];
printf("...
分类:
编程语言 时间:
2015-05-17 23:38:01
阅读次数:
155