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

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

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

  1. 具体看注释,主要采用移位的操作,首先把所有数字的对应位相加,然后%k.因为都是K个,所以对应位会变成0.对于单独出现的一个,那一位就不会是0,而会是1. 因此,只需要 算出这些,然后 1<<i,依次相加即可。
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param arr intvector 
     * @param k int 
     * @return int
     */
    int foundOnceNumber(vector<int>& arr, int k) {
        // write code here

        vector<int> dp(32,0); //保存所有数字二进制中1的个数
        int res = 0;

        for(int i=0; i< arr.size(); i++){
            for(int j =0; j< 32; j++){
                if((arr[i]>>j)&1){//通过移位的方式,判断该位是不是1(逐位判断)
                    dp[j]++;
                }
            }
        }

        //返回结果
        for(int i =0; i<32;i++){
            if((dp[i]%k) & 1){
                res+= 1<<i; // 从低位,依次左移相加,即可得到原值
            }
        }



        return res;

    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务