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;
}
}
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;
}
}
相关文章推荐
- LeetCode|| Single Number II
- [LeetCode] 137--Single Number II --Medium--
- [LeetCode] Single Number II
- [LeetCode]Single Number II
- LeetCode 137 Single Number II
- Leetcode算法学习日志-137 Single Number II
- Leetcode 137 Single Number II
- leetcode之Single Number II
- leetcode笔记:Single Number II
- [LeetCode] Single Number II 位运算
- LeetCode | Single Number II
- LeetCode || Single Number II
- 137. Single Number II LeetCode
- Single Number II--LeetCode
- LeetCode -- Single Number II
- leetcode-137 Single Number II
- 【leetcode】 Single_Number_II
- LeetCode_Single Number II
- 【LeetCode】136 & 137 & 260 - Single Number I & II &III
- LeetCode 【Single Number I II III】