您的位置:首页 > 其它

LeetCode Weekly Contest 13-TotalHamming Distance【中】

2016-12-19 09:49 441 查看
TotalHamming Distance
The
Hamming distance between two integers is thenumber of positions at which the corresponding bits are different.

Now your job is to find the totalHamming distance between all pairs of the given numbers.

Example:

Input: 4, 14, 2

 

Output: 6

 

Explanation: In binary representation,the 4 is 0100, 14 is 1110, and 2 is 0010 (just

showing the four bits relevant in thiscase). So the answer will be:

HammingDistance(4, 14) +HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

Note:

Elements of the given array are in therange of 0 to 10^9

Length of the array will not exceed 10^4.

class Solution {
public:

void itoa(char* p, int x)
{
int i = 0;
while(x > 0)
{
p[i ++] = x % 2 + '0';
x = x / 2;
}
}
int totalHammingDistance(vector<int>& nums) {

int isize = nums.size();
if(isize == 0) return 0;

char arrays[10004][33] = {0};

int i = 0, j = 0, iResult = 0;

for(i = 0; i < isize; i ++)
{
itoa((char*)arrays[i], nums[i]);
//for(j = 0; j < 32; j ++)
//   std::cout<<(char)arrays[i][j]<<" ";

//std::cout<<std::endl;
}

int iOne, iZero;
for(i = 0; i < 32; i ++)
{
iOne = 0; iZero = 0;
for(j = 0; j < isize; j ++)
{
if(arrays[j][i] == '0' || arrays[j][i] == 0) iZero ++;
if(arrays[j][i] == '1') iOne ++;
}
//std::cout<<iZero<<" "<<iOne<<std::endl;
iResult += iZero * iOne;
}

return iResult;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息