算法的学习笔记——二进制中 1 的个数(牛客JZ15)

手机365体育网站经常打不开 🖌️ 2025-10-03 01:02:56 🎨 admin 👁️ 7966 ❤️ 846
算法的学习笔记——二进制中 1 的个数(牛客JZ15)

😀前言 在计算机科学中,二进制是计算和存储数据的基础。理解二进制中的基本运算有助于我们解决各种编程问题。一个经典的问题是:给定一个整数,如何快速计算该整数的二进制表示中1的个数。

🏠个人主页:尘觉主页

文章目录

😊二进制中 1 的个数题目链接

计算整数二进制中1的个数(位运算方法详解)题目描述示例解题思路代码实现(Java)代码解析

图示理解😄总结

😊二进制中 1 的个数

题目链接

牛客网

计算整数二进制中1的个数(位运算方法详解)

题目描述

给定一个整数 n,请输出该数在 32位二进制表示 中 1 的个数。

需要注意的是:

输入的整数可能是 正数、零或负数。负数在计算机中使用 补码表示。数据范围为:

2

31

n

2

31

1

-2^{31} \leq n \leq 2^{31}-1

−231≤n≤231−1

即:-2147483648 <= n <= 2147483647。

示例

示例1:

输入:10

返回值:2

解释:十进制的 10 对应的 32 位二进制表示为:

00000000 00000000 00000000 00001010

其中有 2 个 1。

示例2:

输入:-1

返回值:32

解释:负数使用补码表示,-1 的 32 位二进制为:

11111111 11111111 11111111 11111111

共有 32 个 1。

解题思路

要统计一个整数二进制中 1 的个数,可以使用多种方法:

循环判断每一位

方法:将整数右移,依次检查最低位是否为 1。时间复杂度:固定为 O(32)。缺点:即使数中只有一个 1,也要循环 32 次。 位运算优化方法(推荐)

核心技巧:n & (n-1)

原理:n & (n-1) 会将 n 的二进制表示中 最低位的 1 置为 0。

举例说明:

n = 10(二进制 1010)

n-1 = 9(二进制 1001)

n & (n-1) = 1010 & 1001 = 1000

原本最低的 1 已经被消除。重复操作,直到 n 变为 0,循环次数正好等于二进制中 1 的个数。 时间复杂度:O(M),其中 M 是二进制中 1 的数量。

比固定循环 32 次更高效,尤其是对于稀疏的二进制数(1 很少)。

代码实现(Java)

public class Solution {

public int NumberOf1(int n) {

int count = 0;

while (n != 0) {

count++;

n &= (n - 1); // 将最低位的1置为0

}

return count;

}

}

代码解析

初始化计数器 count = 0

循环条件:n != 0

每次循环:

count++:统计当前最低位的 1n &= (n - 1):消掉当前最低位的 1 循环结束后返回 count

这个方法对 正数、零、负数 都适用,负数自动使用补码表示。

图示理解

以 10 为例(32位):

初始 n = 10: 00000000 00000000 00000000 00001010

第一次操作 n & (n-1) -> 00000000 00000000 00000000 00001000

第二次操作 n & (n-1) -> 00000000 00000000 00000000 00000000

循环结束,总计 2 个 1

😄总结

位运算技巧 n & (n-1) 可以高效统计二进制中 1 的数量,时间复杂度与 1 的个数成正比。对于负数,Java 中使用补码表示,方法依然适用,无需额外处理。这种技巧在 面试和算法竞赛 中非常常见,也是理解位运算的重要基础。对新手来说,通过图示和循环理解这个算法,可以加深对 补码、位运算和二进制表示 的掌握。

😁热门专栏推荐 想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁 希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻 如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章

多语言 SEO:睿智实践和关键步骤
手机365体育网站经常打不开

多语言 SEO:睿智实践和关键步骤

📅 06-30 👁️ 7449
果壳性情精华帖汇总
365日博贴吧

果壳性情精华帖汇总

📅 07-02 👁️ 4354
excel总显示循环使用提示怎么取消
365直播电视版下载

excel总显示循环使用提示怎么取消

📅 08-11 👁️ 2925