位运算巧解独特数字筛查|Java 刷题打卡

本文正在参加「Java主题月 – Java 刷题打卡」,详情查看 活动链接

一、题目描述

只出现一次的数字

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

示例1

输入: [2,2,1]
输出: 1

示例2
输入: [4,1,2,1,2]
输出: 4

二、思路分析

  • 咋看此题很是熟悉,这个和我们之前统计重复数字的题目如出一辙啊。而且当时我可以是通过四种方式来实现的。
  • hash解法、原地置换、跳位寻址等等。但是中间多多少少都引入了额外的变量
  • 在当时的原地置换中我们通过位运算进行两位数据交换。哪种解法还是很抢眼的。
  • 今天我们就是再次通过位运算来解决不重复的数据的。咋听起来可能有点迷茫。其实本题就是利用了位运算的原理充分解决的

异或运算

  • 首先我们得了解下位运算的计算规则。我们这里用到的位运算是异或运算

image-20210524190122111

  • 根据这个特性我们稍微整理下可以得出一个结论 : 0或者1和0进行异或得到的是其本身,进而我们能够得到任何数和0异或得到其本身
x0=xx \wedge 0=x

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享