问题描述:

  https://leetcode.com/problems/single-number-iii/

  在一个数组里面,只有两个元素仅出现过1次,其余都出现过两次。找出出现仅一次的那两个(a, b)。

要求常量空间,线性时间。

问题解决:

  这题用到“神奇的位运算”。

  1.因为除了特殊的两个元素,其余两两出现,那么就想到了XOR(异或)。

  2.从头到尾XOR之后,会得到a xor b 的结果。接下来我们试着把这两个元素分离开来。

  3.我们在a xor b 中找到任意一位XOR[diff_pos] = 1 , 那么可知在diff_pos这位上a 和 b 是不一样的。如果按照diff_pos这位的值

  分类可以将所有数分成两组: 1)diff_pos = 0的元素, 2)diff_pos = 1的元素。

  4.对3中的两组分别组内xor,因为其余元素都是 两两出现,那么最后就剩下a / b 了。

代码如下:

class Solution(object):
def singleNumber(self, nums):
xor = 0
for num in nums:
xor = xor^num
diff_pos = 0
for i in range(31):
if(xor & (1 << i)):
diff_pos = i
break
rec = [0,0]
for num in nums:
if(num & (1 << diff_pos)):
rec[1] ^= num
else:
rec[0] ^= num
return rec

  论文还没看,又在瞎搞了。。。

找最右边的1比特位确实有更好的方法:

xor = xor & ~(xor - );

【LeetCode】-- 260. Single Number III的更多相关文章

  1. 【LeetCode】260. Single Number III 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 异或 字典 日期 题目地址:https://leet ...

  2. 【leetcode】260. Single Number III

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

  3. 【一天一道LeetCode】#260. Single Number III

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  4. 【LeetCode】137. Single Number II 解题报告(Python)

    [LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...

  5. 【刷题-LeeetCode】260. Single Number III

    Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...

  6. 【LeetCode】136. Single Number 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 异或 字典 日期 [LeetCode] 题目地址:h ...

  7. 【LeetCode】137. Single Number II (3 solutions)

    Single Number II Given an array of integers, every element appears threetimes except for one. Find t ...

  8. 【LeetCode】136. Single Number (4 solutions)

    Single Number Given an array of integers, every element appears twice except for one. Find that sing ...

  9. 【LeetCode】137. Single Number II

    题目: Given an array of integers, every element appears three times except for one. Find that single o ...

随机推荐

  1. Vuex实践小记

    1.目录结构 2.开始(安装vuex) npm install vuex --save 3.编辑store/index.js(创建一个Vuex.store状态管理对象) import Vue from ...

  2. 【模板】网络流-最大流 Dinic

    洛谷 3376 #include<cstdio> #include<algorithm> #include<cstring> #define N 10010 #de ...

  3. ERROR 1045 (28000)

    mysql登陆出现这个错误时,解决方法如下: 1. 修改mysql配置文件,增加 skip-grant-tables 如我的机器是linux 所以要修改/etc/mysql/my.cnf 在mysql ...

  4. JFrame实现批量获取Android安装包安全证书MD5

    今天遇到一个需求.获取全部apk的签名的MD5.以下是我使用Java SE实现的一个工具.贴出核心源码.希望给有须要的朋友有所帮助. 界面例如以下: 仅仅须要制定.apk文件所在的文件夹就可以,核心代 ...

  5. ORA-01925:maximum of 80 enabled roles exceeded

    ORA-01925:maximum of 80 enabled roles exceeded max_enabled_roles 9i的參数,10g及以后都不用了. 指定用户session的最大ena ...

  6. SQL 2012中文乱码

    MS SQL插入汉字的时候.常常会遇到部分汉字变成了乱码问号了, 所以在安装数据库或者在创建表的时候须要注意一下几点: 1.保存汉字的字段要用NVARCHAR.NCHAR.NTEXT等.插入的时候要用 ...

  7. Sping框架的IOC特性

    IOC(Inversion of Control):控制反转 以下以课程与老师的安排来介绍控制反转. 一个合理的课程编排系统应该围绕培训的内容为核心,而不应该以具体的培训老师为核心,这样才能在正常授课 ...

  8. android从数据库中取音乐数据

    android从手机数据库中取音乐数据 直接贴代码 public void getMp3(){ list = new ArrayList<>(); Cursor mAudioCursor ...

  9. IFFT 的实现

    IFFT 的实现 前些天给出了FFT的实现,如今给出IFFT(inverse FFT)的实现 基于IFFT 算法.对FFT的核心程序稍作改动就可以 : ) %%******************** ...

  10. YTU 2795: 编程题AB-侦察员的密码

    2795: 编程题AB-侦察员的密码 时间限制: 1 Sec  内存限制: 128 MB 提交: 155  解决: 43 题目描述 侦察员小甲在被捕前在墙上写了两行文字(ASCII字符),其中包含了他 ...