😀前言
在计算机科学中,二进制是计算和存储数据的基础。理解二进制中的基本运算有助于我们解决各种编程问题。一个经典的问题是:给定一个整数,如何快速计算该整数的二进制表示中1的个数。
🏠个人主页:尘觉主页
文章目录
- 😊二进制中 1 的个数
- 题目链接
- 题目描述
- 🤩描述
- 示例1
- 示例2
- 🤩解题思路
- 😄总结
😊二进制中 1 的个数
题目链接
牛客网
题目描述
输入一个整数,输出该数二进制表示中 1 的个数。
🤩描述
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:−231<=n<=231−1
即范围为:−2147483648<=n<=2147483647
示例1
输入:10
返回值:2
说明:十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1
示例2
输入:-1
返回值:32
说明:负数使用补码表示 ,-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111,其中32个1
🤩解题思路
n&(n-1) 位运算可以将 n 的位级表示中最低的那一位 1 设置为 0。不断将 1 设置为 0,直到 n 为 0。时间复杂度:O(M),其中 M 表示 1 的个数。
public int NumberOf1(int n) {int cnt = 0;while (n != 0) {cnt++;n &= (n - 1);}return cnt;
}
😄总结
通过位运算n & (n - 1),我们能够以O(M)的时间复杂度(其中M为二进制表示中1的个数)高效计算一个整数的二进制表示中1的个数。这种方法简洁且快速,尤其适用于处理大范围的整数。通过理解和应用这一技巧,不仅能解决类似的面试问题,还能加深我们对位运算的掌握,提高编程能力。
😁热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞