NC156 数组中只出现一次的数(其它数出现k次)

传送门


class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr intvector 
     * @param k int 
     * @return int
     */
    int foundOnceNumber(vector<int>& arr, int k) {
        // write code here
        int sum= 0;
        for(int i = 31;i>=0;i--){//int型32位,外层循环32次
            int cnt = 0;
            for(int j=0;j<arr.size();j++){
                cnt+=(arr[j]>>i)&1;//获得每个数字第i位的和O(n)
            }
            sum=2*sum+cnt%k;//其他数字都出现了k次,故余数是只出现一次的当前位,二进制转为十进制
        }
        return sum;
    }
};
posted @ 2021-10-06 11:21  Rekord  阅读(32)  评论(0编辑  收藏  举报