我在网上看到的教程都是用的位运算,这一点可能对于初学c语言的人非常不友好,所有我写了不用位运算的算法,供参考
我们直接使用最暴力的办法,两次遍历
代码:
#include<stdio.h>
#include<stdlib.h>
int test(int *num,int arraysize)
{
int i,j,count;
for(i=0;i<arraysize;i++)
{
count=0;
for(j=0;j<arraysize;j++)
{
if(i!=j)
{
if(num[i]==num[j])
count++;
}
if(count==1)
break;
}
if(count==0)
return i;//返回下标
}
}
int main()
{
int a[5]={1,1,2,3,2};
int b=test(a,5);
printf("%d",b);
}
for(i=0;i<arraysize;i++)
{
count=0;
for(j=0;j<arraysize;j++)
{
if(i!=j)
{
if(num[i]num[j])
count++;
}
if(count1)
break;
}
if(count==0)
return i;//返回下标
}
这才是主体,我们可以想到如果在数组中存在两个相同的元素的话,那么其中一个一定是符合a[i]=a[j],那么另一个就一定不是相同的下标,我们顶一个count,一旦有不相同的下标,但是元素的值相同,我们便给count+1,而若是数组只有这一个元素的话(没有其他相同的元素),那么count就是0,于是我么你返回这个索引,中间的break是为了减少循环。