LintCode链接
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
您在真实的面试中是否遇到过这个题? Yes 样例给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4
public class Solution { /** * @param A : An integer array * @return : An integer */ public int singleNumberII(int[] A) { //int 为 32 位 //相同数的每个数位一致 //如果数位的1个数为3的倍数,则为出现3次的数,反之为需要找的那个数 int[] bits = new int[32]; int res=0; for(int i=0; i<32; i++){//求每个数位的个数,余数为要找的数的数位上的值 for(int j=0; j<A.length; j++){ bits[i]+=A[j]>>i & 1;//第i位为1的个数 } bits[i] = bits[i]%3; res = res | bits[i]<<i; //把bits[i]移位会应该在的数位 } return res; } }