(不用位运算)给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

我在网上看到的教程都是用的位运算,这一点可能对于初学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(count
1)
break;
}
if(count==0)
return i;//返回下标
}

这才是主体,我们可以想到如果在数组中存在两个相同的元素的话,那么其中一个一定是符合a[i]=a[j],那么另一个就一定不是相同的下标,我们顶一个count,一旦有不相同的下标,但是元素的值相同,我们便给count+1,而若是数组只有这一个元素的话(没有其他相同的元素),那么count就是0,于是我么你返回这个索引,中间的break是为了减少循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值