Coding interview:位运算2

找出正数中二进制1出现的次数

public int count1(int n) {
        int res = 0;
        while (n!=0){
            res += n&1;
            n>>>=1;
        }
        return res;
    }

其他数都出现偶数次的数组中,找到唯一个出现奇数次的数

public int findTheOnce(int[]arrray){
        int res = 0;
        for(int a:arrray){
            res ^=a;
        }
        return res;
    }

其他都出现K次的数组中,找到唯一一个只出现1次的数

public int findTheOnceInKTimes(int[]array,int k){
        int res = 0;
        int sum = 0;
        for(int i=0;i<31;i++) {
            sum = 0;
            for(int a:array){
                if((a&(1<<i))!=0){
                    sum++;
                }
            }
            if(sum % k == 1){
                res += 1<<i;
            }
        }
        return res;
    }

猜你喜欢

转载自blog.csdn.net/zhumingyuan111/article/details/82951743