已知 arr 中只有 1 个数出现一次,其他的数都出现 k 次。
请返回只出现了 1 次的数。
数据范围: , ,
进阶:时间复杂度 ,空间复杂度
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr int一维数组 * @param arrLen int arr数组长度 * @param k int * @return int */ int foundOnceNumber(int* arr, int arrLen, int k ) { // write code here int m=0; if(k%2==0){ for(int i=0;i<arrLen;i++) m=m^arr[i]; return m; } else{ int ans=0; int flag=1; while(m<32){ int count=0; for(int j=0;j<arrLen;j++){ count+=(arr[j])&flag; arr[j]=(arr[j])>>1; } if(count%k!=0){ ans+=1<<m; } m++; } return ans; } }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr int一维数组 * @param arrLen int arr数组长度 * @param k int * @return int */ int foundOnceNumber(int* arr, int arrLen, int k ) { // write code here int result = 0; for(int i=0;i<32;i++) { int count = 0; for(int j=0;j<arrLen;j++) { if(arr[j]&(1<<i)) { count++; } } if(count % k ==1) result ^= (1<<i); } return result; }