数据结构及算法之异或

一、概念 概念来自百度百科。 链接如下: 异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。 二、运算过程 通过三个例子和 划重点: 异或的运算口诀是相等为0,不相等为1。当然这是在二进制的层面。 下面手动演示一遍 以 12 和 12 为例进行异或演示 十进制的12 在二进制是1100,根据口诀 相等为0,不相等为1。我们发现12和12异或的结果是0。

换个例子我们以A 和 B 以及A进行异或演示(A和B顺序不妨碍结果) A是十六进制数, 相当于十进制的10,转化为二进制就是1010。 B是十六进制数,相当于十进制的11,转化为二进制就是1011。 同样的根据口诀 相等为0,不相等为1。我们发现A和A以及B异或的结果是B(1011)。

所以异或可以很轻松的帮助我们判断出一个数组中出现次数为奇数次的数(如果其他数出现的次数为偶数次的话)。

三、例题 那就有人会问了。 这个异或有什么用呢? 举个例子异或可以帮助我们找到一个数组中出现次数为奇数次的数。 例如LeedCode里面的例题《136. 只出现一次的数字》。 这题我们就可以通过异或来解决。因为出现次数为偶数次的数最终都会被异或掉变成0。最后只保留出现次数为奇数次的数。 代码如下:

经验分享 程序员 微信小程序 职场和发展