【“单身狗”问题】

【“单身狗”问题】

题目

思路

  这个题看着简单,其实不简单,昨晚写这个题的时候,是不是第一影响是有序序列去重,但是这个题跟那个题完全不同,我也想到了那个双指针写法,想着不用排序能不能搞出来这个题,还是很难弄的。
 你想一下,如果先排序,在用双指针来做这个题,是不是代价太大了,一般而言,这种题的要求就是只要遍历一遍,就要找出那个数.我是看了别人的做法,才写出的,自己想不到!!!

*下面来说这个题解:
 采用异或的办法来解决这个问题的,异或是(相同为0,相异为1)则有: a^a = 0;(相同为0),a^0 = a;(任何数与0异或是任何数!)有了这个东西,则上面的问题可以解决了,你想一下,要找“SingleDog”,是不是只有一个数单一出现的,其它的数都是成对出现的,那么通过异或操作相同的为0,不相同的只剩下那儿“a SingleDog”,下面进行代码实现!!!

代码实现

int FindSingleDog(int arr[], int sz)
{
	int SingleDog = 0;
	for (int i = 0; i < sz; i++)
	{
		SingleDog ^= arr[i];
	}
	return SingleDog;
}

int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4 };
	int sz = sizeof(arr) / sizeof(int);
	int SingleDog = FindSingleDog(arr, sz);
	printf("SingleDog = %d", SingleDog);
	return 0;
}

1
希望看这个博客都不是a single dog 吧!!!(小编是!)

完结!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值