利用二进制,记录一下每一位上1出现的次数。然后除k,如果余1的话就说明只出现了一次的数这一位是1。
c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr intvector 
     * @param k int 
     * @return int
     */
    int foundOnceNumber(vector<int>& arr, int k) {
        // write code here
        int cnt[32]={0};
        for(int i = 0 ; i < arr.size() ; i++)
        {
            for(int j = 0 ; j < 32 ; j++)
            {
                int t = 1<<j;
                if(t&arr[i])
                {
                    cnt[j]++;
                }
            }
        }
        int ans = 0;
        for(int j = 0 ; j < 32 ; j++)
        {
            if(cnt[j]%k)
            {
                ans+=(1<<j);
            }
        }
        return ans;
    }
};

java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr int一维数组 
     * @param k int 
     * @return int
     */
    public int foundOnceNumber (int[] arr, int k) {
        // write code here
        int[] cnt= new int[32];
        for(int i = 0 ; i < arr.length ; i++)
        {
            for(int j = 0 ; j < 32 ; j++)
            {
                int t = 1<<j;
                if((t&arr[i]) != 0)
                {
                    cnt[j]++;
                }
            }
        }
        int ans = 0;
        for(int j = 0 ; j < 32 ; j++)
        {
            if(cnt[j]%k !=0)
            {
                ans+=(1<<j);
            }
        }
        return ans;
    }
}

python

class Solution:
    def foundOnceNumber(self , arr , k ):
        cnt = [0]*32
        for i in arr:
            for j in range(0,32):
                t = 1<<j
                if t&i != 0:
                    cnt[j]+=1
        ans = 0
        for j in range(0,32):
            if cnt[j]%k!=0:
                ans+=(1<<j);
        return ans;