异或的理解和应用——消失的数字

异或的用法:

按位异或,相同为0,相异为1

异或的理解:

举个例子
1、两个5异或,即5^5,因为它们所有二进制位都相同,所以相同为0。
2、0和5异或呢?0^5,由于二进制位中,0和0异或相同为0,1和0异或相异为1,所以0异或5答案还是5
3、再复杂一点,5 5 4 4 3 3 2 2 1 1,这数字全部一起异或,由于两辆异或相同为0,所以一起异或结果是0
4、我添加一个9到上面的数组,5 5 4 4 3 3 2 2 1 1 9,这时候异或会是什么?没错是9,前面两两相同的异或结果是0,最后0和9异或根据2的结论,结果就是9

总结:使用异或可以在数组中找出一个落单的数字,可以称它为单身狗。

异或的应用:

题目:
数组nums包含0到n的所有整数,但是其中缺一个,找出缺失的一个整数。——来着leetcode消失的数字。
在这里插入图片描述

思路:1、排序,依次查找,如果下一个数不是上一个数+1,那么上一个数+1就是消失的数字。
O(NxlogN+N),N可以忽略,所以是O(NxlogN);
2、异或
设x=0;把输入的数字全部异或,在把0到numsSize的数字和上面的结果异或,就能得出缺少的。
第一次循环N次,第二次N+1次,O(2N+1),1忽略,2忽略,O(N) 。

int missingNumber(int* nums, int numsSize){
    int x= 0;
    for(int i = 0;i<numsSize;++i)
    {
        x ^= nums[i];
    }

    for(int i = 0;i<=numsSize;++i)
    {
        x ^= i;
    }
   return x;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hhh __灏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值