<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;
}
}
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;
}
}
相关文章推荐
- <LeetCode OJ> Ugly Number / Ugly Number II【263 / 264】
- leetcode 之 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
- Leetcode习题: SingleNumber II
- LeetCode-Single Number II
- LeetCode:Single Number II
- LeetCode Single Number I & 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 II - leetcode
- [LeetCode] Single Number II