1. 程式人生 > >Coding interview:位運算2

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;
    }