算法详解:如何计算二进制中1的个数
创作时间:
作者:
@小白创作中心
算法详解:如何计算二进制中1的个数
引用
1
来源
1.
https://bbs.huaweicloud.com/blogs/432793
在计算机科学领域,理解二进制表示和位运算对于解决各种编程问题至关重要。本文将介绍一个经典算法问题:如何计算一个整数的二进制表示中1的个数。通过这个例子,你将掌握一种高效且优雅的解决方案,并深入了解位运算的巧妙应用。
问题描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:-2^31 <= n <= 2^31 - 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。通过不断执行这个操作,直到n
变为0,可以统计出二进制表示中1的个数。这种方法的时间复杂度为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的个数。这种方法简洁且快速,尤其适用于处理大范围的整数。通过理解和应用这一技巧,不仅能解决类似的面试问题,还能加深我们对位运算的掌握,提高编程能力。
热门推荐
豆腐脑的制作方法与配方详解:从入门到精通
肩胛骨疼痛的真相:是劳累过度还是潜在疾病预警?
次声波的应用,次声波和超声波的区别
上汽大众Polo防冻液更换指南:4升标准容量,两年或4万公里更换一次
活动板房的五种主要材料及其特点
i5 14600KF和13600KF哪个好?怎么选?区别与性能差距对比评测
说话的最高境界:《非暴力沟通》
浙江宁波的山海蓝湾营地,藏于海边的森林之中,宁静且有文艺气息
投射与自我实现:家庭关系中的心理防御机制
如何理解丙二醇价格的波动因素?它对市场供需有什么影响?
银河脑科学:抑郁症治疗迎来“突破前夜”
女性减肥运动最佳方法
干货:软件开发公司都有哪些含金量的资质认证?
观赏鱼体外寄生虫病的症状识别与治疗方案
幼儿急疹、麻疹、川崎病、水痘、风疹……看图识别不同皮疹,附治疗和护理方法
专家热议义务教育与学制改革,缩短年限引关注
宝宝流口水的原因
中医治疗滑膜炎:从药物到物理疗法的全方位调理
春光里的诗意:汉服与油菜花写真指南
藿香正气水知识百科:功效、妙用与禁忌全解析
咖啡渣对植物的影响是你意想不到的
狗狗长癣怎么去除?
发面时,只加酵母和白糖就错了!大厨教你方法,15分钟就发满盆
《射雕英雄传之侠之大者》破5亿 差评一片?
上海浦东10位杰出女职工以“劳动之手”展示“劳动之美”
为孩子转发!各年龄段暑期体能训练指南
种生菜如何施肥?掌握正确施肥方法生菜定高产
4到5岁球类游戏有哪些
痛风急性发作怎么办?治疗急性发作的三类药物,别只知道停海鲜!
论文提出的算法与别人的思路雷同算抄袭吗