Single Number II

Single Number II 

问题:  

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?

思路:

  hashtable 容易想到

  bit vector 新思路

他人代码:

public class Solution {
    public int singleNumber(int[] A) {
        /*
        element in A is 32bit,
        sum corresponding bits from all elements and mod each by 3 then should left the single number
        */
        int[] sum=new int[32];
        int res=0;
        for(int i=0;i<32;i++)
        {
            for(int j=0;j<A.length;j++)
            {
                sum[i]+=((A[j]>>i)&1);//sum every bit of all numbers
            }
            sum[i]%=3;
            res+=((sum[i]&1)<<i);// recover the single number
        }
        return res;
    }
}
View Code

学习之处:

  • bit vector 这种数据结构实在太美妙了
  • 右移 缩小2倍 左移 添加0 增大2倍 深刻左移和右移的含义
  • 数据的变换与恢复方法

need to learn

posted on 2015-03-05 16:36  zhouzhou0615  阅读(125)  评论(0编辑  收藏  举报

导航