题解 | #数组中只出现一次的数(其它数出现k次)#

数组中只出现一次的数(其它数出现k次)

http://www.nowcoder.com/practice/5d3d74c3bf7f4e368e03096bb8857871

按位计算所有数组在各个位数上1的个数,并取模k, 结果是0或者1,另外高位数是1,是负数。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr int一维数组 
     * @param k int 
     * @return int
     */
    public int foundOnceNumber (int[] arr, int k) {
        int res = 0;
        for (int i = 0; i < 32; i++) {
            int sum1 = 0;
            for(int x : arr) {
                sum1 += (x >> i ) & 1;
            }
            int tmp = sum1 % k;
            if (i == 31 && tmp > 0) {
                res -= 1 << 31;
            } else {
                res |= tmp << i;
            }
        }
        return res;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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