AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

LeetCode 461. Hamming Distance    原题链接    简单

作者: 作者的头像   wzc1995 ,  2018-06-30 16:43:50 ,  所有人可见 ,  阅读 1263


2


题目描述

两个整数之间的 Hamming距离 指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。

说明

  • 0 <= x, y < 2^31

样例

输入:x = 1, y = 4

输出:2

解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭头指出了对应二进制位不同的位置。

算法

(位运算) $O(\log x)$
  1. 令 z 等于 x ^ y ,然后只需要统计 z 的数位上有多少个 1。

时间复杂度

  • 异或的时间复杂度为 $O(1)$,统计二进制位 1 的个数时间复杂度为 $O(\log x)$,故总时间复杂度为 $O(\log x)$。

空间复杂度

  • 仅需要常数的额外空间。

C++ 代码

class Solution {
public:
    int hammingDistance(int x, int y) {
        int z = x ^ y, ans = 0;
        for(; z; z -= z & -z)
            ans++;

        return ans;
    }
};

4 评论


用户头像
simonhan   2021-05-27 13:15         踩      回复

### go

func hammingDistance(x int, y int) int {
    ans, s := 0, x^y
    for s != 0 {
        s -= (s & (-s))
        ans++
    }
    return ans
}

### rust

impl Solution {
    pub fn hamming_distance(x: i32, y: i32) -> i32 {
        let (mut ans,mut s) = (0,x ^y);
        while s != 0{
            s -= (s & (-s));
            ans += 1;
        }
        return ans;
    }
}

用户头像
Omega_   2020-04-07 03:11         踩      回复

for循环这是在干嘛

用户头像
wzc1995   2020-04-07 07:23         踩      回复

参考树状数组求 lowbit


用户头像
Omega_   2020-04-07 03:10         踩      回复

看傻了


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息