您的位置:首页 > 其它

leetcode-----Single Number II

2014-12-10 13:43 507 查看
Given an array of integers, every element appears three times except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

对应的二进制位出现若干次3ci

public class Solution {
//本题目的算法不好理解 就是某个数出现一次 其他数出现三次 对应的二进制位就出现三次 记录下来出现三次的二进制位然后清除就可以了。
//上面这句话我相信你是看不明白的 只可意会不可言传啊
public int singleNumber(int[] A) {
if(A==null||A.length==0) return -1;
int ones = 0;
int twos = 0;
int threes = 0;
for(int i=0;i<A.length;i++){
threes=twos&A[i];//出现三次就是在Twos中出现了两次后 又在A[i]中出现了一次。
twos|=ones&A[i];//出现两次的结果就是ones上已经记录了一次 又在A[I]中出现了一次
ones|=A[i];//出现一次
//将twos和ones中出现三次的位清零。
ones&=~(threes);
twos&=~(threes);
}
return ones;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: