您的位置:首页 > 其它

<leetcode> Single Number II

2014-09-29 11:25 127 查看
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?

位操作 

设三个二进制数 one two three

one代表至少出现了一次的位

two代表至少出现了2次的位

three代表出现了3次的位

每次循环中 three为当前two和a[i]的&,代表two中有的位再次出现

two为之前two和one与a[i]的&的|,代表one中出现,当前又出现或者原来已经出现两次的位

one为之前one和a[i]的|

然后每次将one和two中,three为1的位清零

最后two three应当为0,one中剩余的位为出现一次的位

return one

public class Solution {
public int singleNumber(int[] A) {
int one=0;
int two=0;
int three=0;
for(int i=0;i<A.length;i++){
three=two&A[i];
two=two|one&A[i];
one=one|A[i];
one=one&(~three);
two=two&(~three);
}
return one;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: