优雅的异或

一、前言

          今天在听左神的算法课的时候,有一个知识点说的是关于异或方面的,异或其实在数电里面

提到过,就是相同的数异或的结果是0,不同数字异或结果为1;例如2^2 = 0,1^0 = 1,它的规则

是:如果两个相应的二进制位相同,则结果为0,否则结果为1。由于0和0是相同的,所以0异或0

的结果是0。

二、性质

a^b = b^a;  //交换律

(a^b)^c = a^(b^c)   //结合律


a^0=a

0^a = a;

三、应用

       下面来看一道题目:https://leetcode.cn/problems/single-number/description/

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那

个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

           如果上述标红的语句,我相信你一定会利用哈希表存储每个元素出现的次数,然后在遍历哈希表,抛出只出现一次的数字;这里我希望你要明白哈希表的底层原理是如何实现的?分类有哪些?每一类哈希表中的元素是如何存储的?不要只知道用哈希表存储的空间复杂度为O(n),

           题目要求了就是用常数空间复杂度,说明我们不能再利用额外的空间解答这个题目,

大家想象一下,下面这个表达式结果为:

1^2^1^2^4

根据异或的结合率我们知道,原来的式子可以化解成这样:

(1^1)^(2^2)^4

  答案是4。为啥会出现上述结果呢?因为只要一个数字出现了偶数次,不管这个数字出现的地方是

不是连续的位置,我们都可以通过结合律和交换律把这些数字集中在一起,这些数字异或的结果就

是0,最后只剩下0^a了,这里的a就是出现次数为奇数的那个数字。

       OK,假设你已经明白了上述过程,再来送一个题目:

给你一个 非空 整数数组 nums ,除了某两个元素只出现一次以外,其余每个元素均出现两次。找出

只出现了一次的元素。

        嘿嘿,该如何想呢?

  

        

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值