已知 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 }