异或^运算——找到数组中为奇数个数的元素
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
- 题目1(出现奇数次的元素只有一个)
- 题目2(出现奇数次的元素有两个)
题目1(出现奇数次的元素只有一个)
给出指定数组中,查找数组中为奇数个的元素(这样的元素只有一个,其余均为偶数)
arrs = {1,1,5,2,7,5,2,5,7}
这里同样可以借助异或^的特性:相同为0,不同为1。也可以理解为,与0异或就是其本身,与自己异或为0
即代码可以写成
即下面的逻辑可以表示为
题目2(出现奇数次的元素有两个)
给出指定数组中,查找数组中为奇数个的元素(这样的元素有两个,且互不相等,其余均为偶数)
arrs = {1,1,5,2,7,5,2,5,7,7}
假设这两个数字分别为a和b,我们就可以得到
既然a不等于b,那么自然a和b的某一位一定不相同,我假设这个位置为x。
即在整个arrs数组的所有数中,x位为1的次数(0也同样开)中一定包含a或者b其中一个,该步只是为了将arrs数组中的a和b分。将包含a的这部分数据进行异或运算。如果两个数相同,其x位置的数字也相同,即异或后就会剩下a或者b
次数得到b只需要将retNum和retNum2再次进行异或就可以了
此时就可以得到出现奇数次的两个数据
最后代码合起来如下:
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |