解法:
利用二进制,记录一下每一位上1出现的次数。然后除k,如果余1的话就说明只出现了一次的数这一位是1,然后恢复成十进制。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr intvector * @param k int * @return int */ int foundOnceNumber(vector<int>& arr, int k) { // write code here int sum = 0; int cnt; for(int i = 31; i >= 0; i--) { cnt = 0; for(int j = 0; j < arr.size(); j++) { cnt += (arr[j] >> i) & 1; } sum = 2 * sum + cnt%k; } return sum; } };