Single Number II
来源:互联网 发布:flash player mac 编辑:程序博客网 时间:2024/05/18 01:47
示例代码:
class Solution {public: int singleNumber(int A[], int n) { int one=0, two=0, three=0; for(int i=0; i<n; i++){ two |= one&A[i]; one^=A[i]; //cout<<one<<endl; three=one&two; one&= ~three; two&= ~three; } return one; }};
解释:每次循环先计算 twos,即出现两次的 1 的分布,然后计算出现一次的 1 的分布,接着 二者进行与操作得到出现三次的 1 的分布情况,然后对 threes 取反,再与 ones、twos进行与操作,这样的目的是将出现了三次的位置清零。
还有作者pengyu2003写了另一种版本:
http://www.cnblogs.com/pengyu2003/p/3627080.html
class Solution {public: int singleNumber(int A[], int n) { if(A == NULL)return 0 ; int x0 = ~0; int x1 = 0; int x2 = 0; for(int i = 0 ; i < n;i++) { int t = x2; x2 = (x1 & A[i]) |(x2 & ~A[i]); x1 = (x0 & A[i]) |(x1 & ~A[i]); x0 = (t & A[i]) |(x0 & ~A[i]); } return x1; }};
扩展一:
给定一个包含n个整数的数组,除了一个数出现二次外所有的整数均出现三次,找出这个只出现二次的整数。ones记录1出现一次的数,twos记录1出现2次的数,容易知道twos记录的即是最终结果。
扩展二:
给定一个包含n个整数的数组,有一个整数x出现b次,一个整数y出现c次,其他所有的数均出现a次,其中b和c均不是a的倍数,找出x和y。使用二进制模拟a进制,累计二进制位1出现的次数,当次数达到a时,对其清零,这样可以得到b mod a次x,c mod a次y的累加。遍历剩余结果(用ones、twos、fours...变量表示)中每一位二进制位1出现的次数,如果次数为b mod a 或者 c mod a,可以说明x和y的当前二进制位不同(一个为0,另一个为1), 据此二进制位将原数组分成两组,一组该二进制位为1,另一组该二进制位为0。这样问题变成“除了一个整数出现a1次(a1 = b 或 a1 = c)外所有的整数均出现a次”,使用和上面相同的方式计算就可以得到最终结果,假设模拟a进制计算过程中使用的变量为ones、twos、fours...那么最终结果可以用ones | twos | fours ...表示。
原博文:http://www.tuicool.com/articles/UjQV7n- Single Number & Single Number II
- Single Number & Single Number II
- Single Number II - leetcode
- Leetcode: Single Number II
- Single Number II
- Single Number II
- [LeetCode] Single Number II
- LeetCode: Single Number II
- leetcode -- Single Number II
- [leetcode]Single Number II
- [LeetCode] Single Number II
- 【leetcode】Single Number II
- Single Number I & II
- LeetCode:Single Number II
- Leetcode: Single Number II
- Single Number II
- leetcode :Single Number II
- Leetcode Single Number II
- Valid Sudoku
- c# using 关键字小结
- 在.net项目中生成的pdb是什么文件?
- HashSet和TreeSet
- 推荐系统思考小结(基于Mahout)
- Single Number II
- Quartz深入浅出(二)
- Eclipse关闭XML文件验证的方法
- SQL 找出一字段中所有重复的记录
- Oracle11gR2 安装 OWB 笔记(二)
- 解读Unity中的CG编写Shader系列10——光滑的镜面反射(冯氏着色)
- 归并排序-这个更清晰些
- android压缩解压缩zip文件格式
- Windows下Nginx的启动、停止等命令