C语言:找出只出现一次的数

这篇博客介绍了两种方法来找出数组中唯一出现一次的元素。首先,通过循环遍历数组并计数,当元素出现次数为1时输出。虽然简单,但效率较低。然后,利用异或的性质,将数组所有元素进行异或运算,最终得到的结果即为只出现一次的元素,这种方法更为高效。
摘要由CSDN通过智能技术生成

目录

1.问题

2.循环实现

3.异或实现


1.问题

问题:给定一个非空整型数组,除了某个元素出现一次外,其余每个元素均出现两次,找出只出现了一次的元素

例如:int a[] = {1,2,3,4,5,1,2,3,4};

a的整型数组中,只有5是出现了一次,其余的数字都是成双出现的。目标,找出5

2.循环实现

实现思路:通过循环,将数组的每个元素遍历,然后判断元素是否只是出现了一次

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int a[] = { 1,2,3,4,5,1,2,3,4 };

	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);   //数组大小

	for (i = 0; i < sz; i++)	//循环数组每个元素
	{
		int count = 0;				//计数变量
		int j = 0;
		for (j = 0; j < sz; j++)		//循环数组每个元素
		{
			if (a[i] == a[j])		//当元素相同的时候,count++
				count++;			//因为两次都是从a[0]遍历,所以count最少为1
		}
		if (count == 1)				//当数组某个元素单独出现,打印出来
			printf("%d\n", a[i]);
	}

	return 0;
}




 在判断出的时候,应该break跳出循环,本代码没有跳出

这是一种暴力求解思路,如果数组元素够多的话,代码还需要优化

3.异或实现

之前交换两个数字的实现中,可以知道异或的两个特性

  • 0^a=a
  • a^a=0

如果将数组的每一个元素都异或的话,相同的元素会异或成0,而单独的数字会和0异或成自身,那么就可以找到这个单独的数字

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
	int a[] = { 1,2,3,4,5,1,2,3,4 };

	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);   //数组大小
	int ret = 0;

	for (i = 0; i < sz; i++)	//循环数组每个元素
	{
		ret ^= a[i];    //异或每一个元素
	}
	printf("%d\n", ret);
	return 0;
}




  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵星人监护人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值