题解 | #求平均值#
数组中只出现一次的数(其它数出现k次)
http://www.nowcoder.com/practice/5d3d74c3bf7f4e368e03096bb8857871
使用位运算,一个int类型共四个字节,因此有32位,统计数组所有数字二进制形式每一位1出现的次数,在创建的新数组bit上进行累加,如果是出现k次的数字,那么位数组上相应位一定是k,因此可以被k整除,所以无法被k整除的二进制位,使用左移操作把所有无法被k整除的位相加,结果即为只出现一次的数字。
public int med(int arr[],k){ int[] bit = 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){ bit[j]++; } } } int ans = 0; for(int i = 0; i < 32; i++){ if((bit[i] % k) != 0){ ans += (1 << i); } } return ans; }