已知 arr 中只有 1 个数出现一次,其他的数都出现 k 次。
请返回只出现了 1 次的数。
数据范围:
,
,
进阶:时间复杂度
,空间复杂度
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr int一维数组
* @param k int
* @return int
*/
function foundOnceNumber( arr , k ) {
// write code here
let obj={};
arr.forEach(item=>{
if(obj[item]){
obj[item]++;
}else{
obj[item]=1;
}
})
//console.log(obj);
let index = '0';
for(let i in obj){
if(obj[i]!=k){
index = i;
}
}
return index;
}
module.exports = {
foundOnceNumber : foundOnceNumber
}; function foundOnceNumber( arr , k ) {
// write code here
//计算每一位上出现1的个数,%k得到出现一次的数
let res = 0;
for(let i=0;i<32;++i){
let sum =0;
for(let num of arr){
//用无符号右移,防止正负号的影响
//依次右移num,同1相与,计算每一位上1的个数
sum+=(num>>i)&1
}
//对sum取余,左移恢复
res^=(sum%k)<<i
}
return res
}