【C语言刷LeetCode】477. 汉明距离总和(M)

news/2024/11/28 16:32:28/

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。

给你一个整数数组 nums,请你计算并返回 nums 中任意两个数之间 汉明距离的总和 。

示例 1:

输入:nums = [4,14,2]
输出:6
解释:在二进制表示中,4 表示为 0100 ,14 表示为 1110 ,2表示为 0010 。(这样表示是为了体现后四位之间关系)
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6
示例 2:

输入:nums = [4,14,4]
输出:4
 

提示:

1 <= nums.length <= 104
0 <= nums[i] <= 109
给定输入的对应答案符合 32-bit 整数范围

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/total-hamming-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

位运算题目里,把复杂度降为 O(n) 的骚操作基本都是写一个 32 次的 for 循环,恰如好多”仅包含字母“的题目的骚操作都是写一个 26 次的 for 循环。

(nums[j] >> i) & 1 : 统计第i位上是否为1.

来自官方题解:

在计算汉明距离时,我们考虑的是同一比特位上的值是否不同,而不同比特位之间是互不影响的。
对于数组{nums}中的某个元素val,若其二进制的第 i位为 1,我们只需统计nums 中有多少元素的第i 位为0,即计算出了val 与其他元素在第i 位上的汉明距离之和。
这些元素在二进制的第 i 位上的汉明距离之和为
c⋅(n−c)
我们可以从二进制的最低位到最高位,逐位统计汉明距离。将每一位上得到的汉明距离累加即为答案。

int totalHammingDistance(int* nums, int numsSize){int i, j;int retcnt = 0;int onecnt = 0;for (i = 0; i < 32; i++) { // 给定输入符合 32bit范围,那便按位遍历onecnt = 0;for (j = 0; j < numsSize; j++) { // 遍历全部数字中全部数字onecnt += (nums[j] >> i) & 1; // 统计第i位上为1的数有多少个}retcnt += onecnt * (numsSize - onecnt); // 统计第i位上的汉明距离}return retcnt;
}


http://www.ppmy.cn/news/535612.html

相关文章

log.info的用法

log.info()是一种常用的日志记录方法&#xff0c;它用于将信息性的消息记录到日志文件或其他日志输出目标中。通常&#xff0c;它用于记录程序的运行状态、事件或重要信息。 使用log.info()时&#xff0c;一般需要先创建一个日志记录器&#xff08;logger&#xff09;对象&…

七牛云错误-区域错误

incorrect region, please use up-z2.qiniup.com 不正确的区域&#xff0c;请使用zone2 我用的是华南&#xff0c;但配置类的参数是Zone.zone0&#xff08;&#xff09; 区域 编码 华东 Zone.zone0 华北 Zone.zone1 华南 Zone.zone2 北美 Zone.zoneNa0

0x00007FF9528AC648 (ucrtbase.dll) (TEST.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。

如图所示&#xff0c;该怎么解决“0x00007FF9528AC648 (ucrtbase.dll) (TEST.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数”问题啊&#xff1f;

阿里云盘分享

modelsim-win64-10.6d-se 链接&#xff1a;https://www.aliyundrive.com/s/cfWUtuJ9h8h modelsim_crack 链接&#xff1a;https://www.aliyundrive.com/s/otmfQqzqNZ7 敬伟PS教程 链接&#xff1a;https://www.aliyundrive.com/s/q9gpmSfWK2i

【从零开始学习JAVA | 第十三篇】继承

目录 前言&#xff1a; 引入&#xff1a; 继承&#xff1a; 小拓展&#xff1a; 优点&#xff1a; 成员方法的继承问题&#xff1a; 总结&#xff1a; 前言&#xff1a; 继承是面向对象三大特性之一&#xff0c;它是在封装之后我们讲解的一个重要的性质&#xff0c;继承…

Technical support of WBZ Picture Combination

Please contact us if you have any questions &#xff01;&#xff01; email&#xff1a;zhangwangbao920716163.com

java base64上传图片|接口读取图片,springboot配置映射读取资源

1.上传图片 public static String uploadImg(String baseImg,String basePath,String fileSavePath,HttpServletRequest request) {String type getImageType(baseImg);//去除base64图片的前缀baseImg baseImg.replaceFirst("data:(.?);base64,", "");…

百度云直链获取优化版

// UserScript // name 百度网盘简易下载助手&#xff08;直链下载复活版&#xff09; // namespace http://bd.softxm.cn/bd/ // version 1.3.3 // antifeature membership // description ████ 20210813满速接口依然可用 ████一个纯净好用的直链下…