Leetcode 477 Total Hamming Distance

来源:互联网 发布:淘宝运营助理工资 编辑:程序博客网 时间:2024/05/17 06:12

Leetcode 477 Total Hamming Distance

#include <vector>#include <intrin.h>//__popcnt#include<nmmintrin.h>using namespace std;class Solution {public:    int hammingDistance(int x, int y) {        int z = x ^ y;//异或        int count = 0;        while (z){            z = z &(z - 1);            count++;        }        return count;    }//超时    int hammingDistance2(int x, int y){        int z = x ^y;         //_mm_popcnt_u32(z);        // __popcnt(z);        int count = __builtin_popcount(z);//gcc        return count;    }//超时    int totalHammingDistance(vector<int>& nums) {        int totalHd = 0;        int size = nums.size();        for (int i = 0; i < size - 1; i++){            for (int j = i + 1; j < size; j++){                totalHd += hammingDistance(nums[i], nums[j]);            }        }        return totalHd;    }};//考虑所有数字的同一个bit位,统计在这个bit位上出现的1的次数count//那么这个bit位在总的汉明距离中就贡献了count*(n - count),n是数组中元素的个数。class Solution {public:    int totalHammingDistance(vector<int>& nums) {        int totalHd = 0;        int size = nums.size();        for (int j = 0; j < 32; j++){            int bitCount = 0;            for (int i = 0; i < size; i++){                bitCount += (nums[i] >> j) & 1;//nums[i]这个数在j位上是否是1            }            totalHd += bitCount * (size - bitCount);        }        return totalHd;    }};
原创粉丝点击