文巾解题 477. 汉明距离总和
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. 汉明距离总和相关推荐
- 文巾解题 113. 路径总和 II
1 题目描述 2 解题思路 2.1BFS 广度优先搜索 我们设计一个这样的队列 队列的每个元素是一个三元数组:从根节点到当前点的路径总和+当前节点+从根节点到当前节点的路径 每次我们从队列中弹出一个元 ...
- 文巾解题 461. 汉明距离
1 题目描述 2 解题思路 2.1 方法1:计算x和y的异或,输入位不同的时候,输出为1 lass Solution:def hammingDistance(self, x: int, y: int) ...
- 文巾解题 面试题 01.04. 回文排列
1 题目描述 2 解题思路 2.1 哈希表 创建一个哈希表,记录每个元素出现的次数.如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列 class Solution:def canPerm ...
- 文巾解题 15. 三数之和
1 题目描述 2 解题思路 2.1 使用两数之和函数 这种做法目前超时了,如果大家有想到合适的减时间/剪枝的方法,欢迎私信or评论~ 两数之和的方法见文巾解题 1. 两数之和_刘文巾的博客-CSDN博 ...
- 文巾解题 342. 4的幂
1 题目描述 2 解题思路 2.1 方法1 判断log函数的结果是不是整数 class Solution:def isPowerOfFour(self, n: int) -> bool:if(n ...
- 文巾解题 1035. 不相交的线
1 题目描述 2 解题思路 k条互不相交的直线分别连接了数组 nums1和nums2的 k 对相等的元素,而且这 k 对相等的元素在两个数组中的相对顺序是一致的,因此,这 k 对相等的元素组成的序列即 ...
- 477. 汉明距离总和
链接:477. 汉明距离总和 题解: class Solution { public:int totalHammingDistance(vector<int>& nums) {in ...
- 文巾解题 278. 第一个错误的版本
1 题目描述 2 解题思路 二分查找见:二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def firstBadVersion(self, n):left=1r ...
- 文巾解题 704. 二分查找
1 题目描述 2 解题思路 二分查找见: 二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def search(self, nums, target):left ...
最新文章
- 谷歌新操作系统Fuchsia网站上线,同时支持手机和PC,鼓励开发者参与进来
- Chrome插件-新浪微博阅读器
- 如何在linux(ubuntu)的wine环境下开启source insight的tabsihost(或tabsiplus)
- 1、HTTP--Web's foundation
- 【原创】利用腾讯和百度的AI接口识别验证码
- org.springframework.boot:type=Admin,name=SpringApplication异常
- crammd5 php,使用CRAMMD5的SMTP身份验证
- fan类java_Java常用类
- FlexSlider插件的详细设置参数
- linux删除磁盘设备,linux添加,移除scsi设备
- springboot获取视频时长以及截取视频第一帧
- STM32F100X RCC_APB2Periph_AFIO--复用IO时钟的使用
- 安卓QQ聊天记录导出、备份完全攻略
- 广域网宽带接入技术一
- python3 中文繁体转换简体,简体转换为繁体,汉字转换拼音
- VB如何自动保存_VB开发的身份证个人信息自动识别软件
- 《高等数学》学习笔记一:函数与极限
- nodeJS生成随机token
- 我模拟了一个机器人后,对分层思想的更多感受
- 2022年终总结:给心一个立住的理由【失败后自我恢复、压力中自我拯救】
热门文章
- 替换ExpandableListView右边箭头Group Indicator(小图标)
- 网上整理的jQuery插件开发教程
- [转载] 七龙珠第一部——第094话 太阳拳
- 构造函数的初始化,初始化列表还是大括号里好,那种效率高
- 计算机组成原理第7章-输入/输出系统
- 怎么转换html文件为mp3,如何把音频转换成mp3_音频文件怎么转mp3格式-系统城
- python3怎么创建一个链表_怎么创建一个自己的微信公众号
- as工程放到源码编译_关于AS高版本SDK编译生成的apk放入低版本android源码中集成编译...
- java9.0.1教学,零基础Java基础教程【9天入门】
- 舞蹈里需要用计算机的地方,【舞蹈教学论文】计算机多媒体技术在舞蹈教学中的应用(共2080字)...