题目描述:
给定一个整型数组 arr和一个整数 k(k>1)。
已知 arr 中只有 1 个数出现一次,其他的数都出现 k次。
请返回只出现了 1 次的数。
解题分析:
若K为偶数,则可以直接将arr中所有元素异或,最后的结果便是答案。
若K为奇数,则需要在每一位上进行相加操作,人后将每一位的值对K取余,那便是只出现一次的数了。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr intvector
* @param k int
* @return int
*/
int foundOnceNumber(vector<int>& arr, int k) {
// write code here
vector<int> bitmap(32);
for(auto num: arr){
for(int i=0; i<32; ++i){
if(num&1>0)
bitmap[i]+=1;
num>>=1;
}
}
int ans=0;
int flage=1;
for(int i=0; i<32; ++i){
ans+=(bitmap[i]%k)*flage;
flage*=2;
}
return ans;
}
};