利用二进制,记录一下每一位上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;