统计两数「二进制表示中不同位」个数的几种方式 | Java 刷题打卡

简介: 统计两数「二进制表示中不同位」个数的几种方式 | Java 刷题打卡

网络异常,图片无法展示
|


逐位比较



本身不改变 xxyy,每次取不同的偏移位进行比较,不同则加一。


循环固定取满 3232


网络异常,图片无法展示
|


代码:


class Solution {
    public int hammingDistance(int x, int y) {
        int ans = 0;
        for (int i = 0; i < 32; i++) {
            int a = (x >> i) & 1 , b = (y >> i) & 1;
            ans += a != b ? 1 : 0;
        }
        return ans;
    }
}
复制代码


  • 时间复杂度:O(C)O(C)CC 固定为 3232
  • 空间复杂度:O(1)O(1)


右移统计



每次都统计当前 xxyy 的最后一位,统计完则将 xxyy 右移一位。


xxyy 的最高一位 11 都被统计过之后,循环结束。


网络异常,图片无法展示
|


代码:


class Solution {
    public int hammingDistance(int x, int y) {
        int ans = 0;
        while ((x | y) != 0) {
            int a = x & 1, b = y & 1;
            ans += a ^ b;
            x >>= 1; y >>= 1;
        }
        return ans;
    }
}
复制代码


  • 时间复杂度:O(C)O(C)CC 最多为 3232
  • 空间复杂度:O(1)O(1)


lowbit



熟悉树状数组的同学都知道,lowbit 可以快速求得 xx 二进制表示中最低位 11 表示的值。


因此我们可以先将 xxyy 进行异或,再统计异或结果中 11 的个数。


网络异常,图片无法展示
|


代码:


class Solution {
    int lowbit(int x) {
        return x & -x;
    }
    public int hammingDistance(int x, int y) {
        int ans = 0;
        for (int i = x ^ y; i > 0; i -= lowbit(i)) ans++;
        return ans;
    }
}
复制代码


  • 时间复杂度:O(C)O(C)CC 最多为 3232
  • 空间复杂度:O(1)O(1)
相关文章
|
5月前
|
安全 Java API
【Java性能优化】Map.merge()方法:告别繁琐判空,3行代码搞定统计累加!
在日常开发中,我们经常需要对Map中的值进行累加统计。}else{代码冗长,重复调用get()方法需要显式处理null值非原子操作,多线程下不安全今天要介绍的方法,可以让你用一行代码优雅解决所有这些问题!方法的基本用法和优势与传统写法的对比分析多线程安全版本的实现Stream API的终极优化方案底层实现原理和性能优化建议一句话总结是Java 8为我们提供的Map操作利器,能让你的统计代码更简洁、更安全、更高效!// 合并两个列表});简单累加。
457 0
|
9月前
|
存储 Java BI
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
243 17
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
116 0
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_2_二进制加法(java)
剑指offer_2_二进制加法(java)
java使用Files.walkFileTree统计文件夹下的文件夹和文件数量
java使用Files.walkFileTree统计文件夹下的文件夹和文件数量
223 0
|
Java Serverless
Java字符个数统计代码
Java字符个数统计代码
163 6
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
2022蓝桥杯大赛软件类省赛Java大学B组真题 刷题统计
164 0
|
21天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
59 0

热门文章

最新文章