一个数组里,数都是两两出现的,但是有三个数是唯一出现的,找出这三个数,这一题的基本用法和上一个字符匹配是相同的同样使用hash表。
void Single_Num(int *s)
{
int hash[10]={0};
for (int i=0;i<M;i++) //M为数组的长度
{
int index=s[i]-0;//只考虑9以内的数字,所以,减去了0
hash[index]++;
}
for (i=0;i<10;i++)
{
if (1==hash[i])
{
printf("%d ",i);
}
}
}
看了几个人的博客,有新的方法用异或的方法,很是不错。自己也写了一个,不过没有考虑效率
//利用异或的写法,本身的数字异或为零,不同数字异或不为零
void Single_Num1(int *s,int size)
{
//int sum=-1;
for (int i=0;i<size;i++)
{
for (int j=0;j<size;j++)
{
if (i!=j) //排除自身异或
{
if ((s[i]^s[j])==0)
{
//printf("%d ",s[i]);
s[i]=0;//将它们变成一个数组中不存在的数,在这里我把他们设置为0
s[j]=0;
}
}
}
}
for (i=0;i<size;i++)
{
if (s[i]!=0)
{
printf("%d ",s[i]);
}
}
}
这是几个牛人写的,http://blog.csdn.net/w397090770/article/details/8032898,http://blog.csdn.net/wangwh485/article/details/6715357。大家多交流