位运算之只出现一次的的数字

******位运算系列之数组中只出现一次的数字******



//题目(1):在一个数组中只有一个数字出现一次,其他数字都是成对出现的!让你找出这个只出现一次的数字,
//其实,这也叫缺失的数字,用来找成对数组中里有一对数字缺失了一个数字的数组成员!


/*
那么,现在先来分析一下,一般情况下,我们最先想到的方法就是统计一下数组中每个成员出现的次数,然后
找出那个只出现了一次的数字,不可否认的是方法是可行的,可是效率问题就出来了,这种方法的时间复杂度
是O(n^2);看来并不是解决问题的最佳方案,还有同学会提出可以先将数组排序,然后比较相邻两个数是否相同
,可以找出这个单独出现一次的数,可是考虑一下排序的时间复杂度,显然也不是最优方案,这两种解决方法
大家可以自己试一试,才能感觉到不同!

那么,想想我们知道的位操作符,想想用二进制是否可以解决这个问题;

1.) 先回忆一下异或运算符的作用,(^) 处理二进制中两个数的异或时,相同为0,相异为1,异或还有交换的作用;
那么我们假设数组是{2,3,2,4,4},数组中成对的成员不一定是在一起的,我们先把他们的二进制列出来:
@我就不把32位都列出来了!

2:0010
3:0011
2:0010
4:0100
4:0100

既然相同位异或为0,那么让数组中的全部元素异或后的结果不就是那个单独出现一次的数字了&#x
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值