题解 | #求平均值#

数组中只出现一次的数(其它数出现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;

}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务