1 题目描述

2 解题思路

2.1 暴力两两比较

两个数字之间的汉明距离可以使用 文巾解题 461. 汉明距离_刘文巾的博客-CSDN博客 中的任何一种方法,但是因为这个是两两比较,时间复杂度比较高,所以提交后会超时。

class Solution:def totalHammingDistance(self, nums: List[int]) -> int:ret=0l1=len(nums)for i in range(l1):for j in range(i+1,l1):tmp=nums[i]^nums[j]ret+=bin(tmp).count('1')return(ret)

2.2 逐位统计

在计算汉明距离时,我们考虑的是同一比特位上的值是否不同,而不同比特位之间是互不影响的。

对于数组nums 中的某个元素val,若其二进制的第 i 位为 1,我们只需统计nums 中有多少元素的第 i 位为 0,即计算出了val 与其他元素在第 i 位上的汉明距离之和。(因为1和1是没有汉明距离的,同时我们不用考虑二进制的第i位为0的情况。因为为0的所有情况都在考虑第i位为1的时候考虑过了。)

具体地,若长度为 n 的数组nums 的所有元素二进制的第 i 位共有 c 个 1,那么就有n−c 个 0。那么者些元素在二进制的第 i 位上的汉明距离之和为 c*(n-c)。

我们可以从二进制的最低位到最高位,逐位统计汉明距离。将每一位上得到的汉明距离累加即为答案。

由于题目说了最大的数为,最小的比这个数大的的2的幂就是,所以我们最多就考虑这30位就ok了。

class Solution:def totalHammingDistance(self, nums: List[int]) -> int:n=len(nums)ret=0for i in range(30):c=0for j in nums:c+=(j>>i)&1ret+=c*(n-c)return(ret)

文巾解题 477. 汉明距离总和相关推荐

  1. 文巾解题 113. 路径总和 II

    1 题目描述 2 解题思路 2.1BFS 广度优先搜索 我们设计一个这样的队列 队列的每个元素是一个三元数组:从根节点到当前点的路径总和+当前节点+从根节点到当前节点的路径 每次我们从队列中弹出一个元 ...

  2. 文巾解题 461. 汉明距离

    1 题目描述 2 解题思路 2.1 方法1:计算x和y的异或,输入位不同的时候,输出为1 lass Solution:def hammingDistance(self, x: int, y: int) ...

  3. 文巾解题 面试题 01.04. 回文排列

    1 题目描述 2 解题思路 2.1 哈希表 创建一个哈希表,记录每个元素出现的次数.如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列 class Solution:def canPerm ...

  4. 文巾解题 15. 三数之和

    1 题目描述 2 解题思路 2.1 使用两数之和函数 这种做法目前超时了,如果大家有想到合适的减时间/剪枝的方法,欢迎私信or评论~ 两数之和的方法见文巾解题 1. 两数之和_刘文巾的博客-CSDN博 ...

  5. 文巾解题 342. 4的幂

    1 题目描述 2 解题思路 2.1 方法1 判断log函数的结果是不是整数 class Solution:def isPowerOfFour(self, n: int) -> bool:if(n ...

  6. 文巾解题 1035. 不相交的线

    1 题目描述 2 解题思路 k条互不相交的直线分别连接了数组 nums1和nums2的 k 对相等的元素,而且这 k 对相等的元素在两个数组中的相对顺序是一致的,因此,这 k 对相等的元素组成的序列即 ...

  7. 477. 汉明距离总和

    链接:477. 汉明距离总和 题解: class Solution { public:int totalHammingDistance(vector<int>& nums) {in ...

  8. 文巾解题 278. 第一个错误的版本

    1 题目描述 2 解题思路 二分查找见:二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def firstBadVersion(self, n):left=1r ...

  9. 文巾解题 704. 二分查找

    1 题目描述 2 解题思路 二分查找见: 二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def search(self, nums, target):left ...

最新文章

  1. 谷歌新操作系统Fuchsia网站上线,同时支持手机和PC,鼓励开发者参与进来
  2. Chrome插件-新浪微博阅读器
  3. 如何在linux(ubuntu)的wine环境下开启source insight的tabsihost(或tabsiplus)
  4. 1、HTTP--Web's foundation
  5. 【原创】利用腾讯和百度的AI接口识别验证码
  6. org.springframework.boot:type=Admin,name=SpringApplication异常
  7. crammd5 php,使用CRAMMD5的SMTP身份验证
  8. fan类java_Java常用类
  9. FlexSlider插件的详细设置参数
  10. linux删除磁盘设备,linux添加,移除scsi设备
  11. springboot获取视频时长以及截取视频第一帧
  12. STM32F100X RCC_APB2Periph_AFIO--复用IO时钟的使用
  13. 安卓QQ聊天记录导出、备份完全攻略
  14. 广域网宽带接入技术一
  15. python3 中文繁体转换简体,简体转换为繁体,汉字转换拼音
  16. VB如何自动保存_VB开发的身份证个人信息自动识别软件
  17. 《高等数学》学习笔记一:函数与极限
  18. nodeJS生成随机token
  19. 我模拟了一个机器人后,对分层思想的更多感受
  20. 2022年终总结:给心一个立住的理由【失败后自我恢复、压力中自我拯救】

热门文章

  1. 替换ExpandableListView右边箭头Group Indicator(小图标)
  2. 网上整理的jQuery插件开发教程
  3. [转载] 七龙珠第一部——第094话 太阳拳
  4. 构造函数的初始化,初始化列表还是大括号里好,那种效率高
  5. 计算机组成原理第7章-输入/输出系统
  6. 怎么转换html文件为mp3,如何把音频转换成mp3_音频文件怎么转mp3格式-系统城
  7. python3怎么创建一个链表_怎么创建一个自己的微信公众号
  8. as工程放到源码编译_关于AS高版本SDK编译生成的apk放入低版本android源码中集成编译...
  9. java9.0.1教学,零基础Java基础教程【9天入门】
  10. 舞蹈里需要用计算机的地方,【舞蹈教学论文】计算机多媒体技术在舞蹈教学中的应用(共2080字)...