5/30/2014

14. Single Number II

public class Solution {
    public int singleNumber(int[] A) {
        if (A.length<=1) return A[0];
       
        int[] count = new int[32];
        int res = 0;
       
        for (int i=0; i<32; i++) {
            for (int j=0; j<A.length; j++) {
                if (((A[j]>>i)&1)==1) count[i] = (count[i]+1)%3;
            }
            res |= count[i]<<i;
        }
       
        return res;
    }
}

2 条评论:

  1. 用32位数组count[]表示A中每个数的二进制,出现3次的数的count[]为0,count[]相当于single number的二进制.

    回复删除
  2. 注意((A[j]>>i)&1)==1 括号的使用.

    回复删除