LeetCode_位运算_中等_477.汉明距离总和

news/2024/11/28 11:38:34/

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

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

给你一个整数数组 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/problems/total-hamming-distance

2.思路

(1)暴力穷举法 & 位运算
暴力穷举法是一种比较容易想到的方法,即先求出数组 nums 中任意两个数之间的汉明距离,然后再将它们进行累加即可。具体求两个数之间的汉明距离的方法可以参考LeetCode_位运算_简单_461. 汉明距离这题。不过需要注意的是,在 LeetCode 中使用 n & (n - 1) 这种方式来求汉明距离时会出现"超出时间限制"的提示!

(2)按位统计
思路参考该 LeetCode 用户题解。

3.代码实现(Java)

//思路1————位运算
class Solution {public int totalHammingDistance(int[] nums) {int res = 0;for (int i = 0; i < nums.length - 1; i++) {for (int j = i + 1; j < nums.length; j++) {//调用 hammingDistance1(int x, int y) 会出现"超出时间限制"的提示!res += hammingDistance2(nums[i], nums[j]);}}return res;}public int hammingDistance1(int x, int y) {int res = 0;int n = x ^ y;// n & (n - 1) 可以消除 n 的二进制表示的最后一个 1while (n != 0) {n = n & (n - 1);res++;}return res;}public int hammingDistance2(int x, int y) {return Integer.bitCount(x ^ y);}
}
//思路2————按位统计
class Solution {public int totalHammingDistance(int[] nums) {int res = 0;for (int i = 31; i >= 0; i--) {int s0 = 0, s1 = 0;for (int num : nums) {if (((num >> i) & 1) == 1) {s1++;} else {s0++;}}res += s0 * s1;}return res;}
}

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

相关文章

LeetCode | 477. Total Hamming Distance

题目 The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Given an integer array nums, return the sum of Hamming distances between all the pairs of the integers in nums. Example 1: Input: n…

【博客477】prometheus-----数值数据编码(varint与zigzag)

prometheus-----数据编码(varint与zigzag) prometheus对数值数据进行编码时&#xff0c;使用到了varint与zigzag varint与zigzag编码方法在protobuf中也被使用 prometheus encoding代码&#xff1a; https://github.com/prometheus/prometheus/blob/main/tsdb/encoding/encodi…

​LeetCode刷题实战477:汉明距离总和

算法的重要性&#xff0c;我就不多说了吧&#xff0c;想去大厂&#xff0c;就必须要经过基础知识和业务逻辑面试算法面试。所以&#xff0c;为了提高大家的算法能力&#xff0c;这个公众号后续每天带大家做一道算法题&#xff0c;题目就从LeetCode上面选 &#xff01; 今天和大…

LeetCode 算法 每日一题 477.汉明距离总和

10.正则表达式匹配 题目描述 两个整数的汉明距离指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例1 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0…

奇舞周刊 477 期:一文弄懂 React ref 原理

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 一文弄懂 React ref 原理 对于 Ref 理解与使用&#xff0c;一些读者可能还停留在用 ref 获取真实 DOM 元素和获取类组件实例层面上 其实 ref 除了这两项常用功能之外&#xff0c;还…

Java实现 LeetCode 477 汉明距离总和

477. 汉明距离总和 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0c;2表…

leetcode 477.汉明距离总和

每日一题 昨天做了道相似的汉明距离详见leetcode461&#xff0c;今天又看见类似的题目准备重拳出击&#xff01; 博主技术有限…于是直接暴力 class Solution {public int totalHammingDistance(int[] nums) {int sum 0;int total 0;for(int i 0;i < nums.length;i){for…

leetcode 477 汉明距离总和(位运算、排列组合)

题目描述&#xff1a; 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0c;…