首页 理论教育 Kotlin程序员算法宝典:高效求二进制中1的个数

Kotlin程序员算法宝典:高效求二进制中1的个数

时间:2023-10-31 理论教育 版权反馈
【摘要】:难度系数:★★★☆☆ 被考察系数:★★★★☆题目描述:给定一个整数,输出这个整数的二进制表示中1的个数。例如:给定整数7,其二进制表示为111,因此输出结果为3。可以通过不断地用n&(n-1)操作去掉n中最后一位1的方法求出n中1的个数,实现代码如下:算法性能分析:这种方法的时间复杂度为O,其中,m为二进制数中1的个数,显然,当二进制数中1的个数比较少的时候,这种方法有更高的效率。

Kotlin程序员算法宝典:高效求二进制中1的个数

【出自TX笔试题】

难度系数:★★★☆☆ 被考察系数:★★★★☆

题目描述:

给定一个整数,输出这个整数的二进制表示中1的个数。例如:给定整数7,其二进制表示为111,因此输出结果为3。

分析与解答:

方法一:移位法

可以采用位操作来完成。具体思路如下:首先,判断这个数的最后一位是否为1,如果为1,则计数器加1,然后,通过右移丢弃掉最后一位,循环执行该操作直到这个数等于0为止。在判断二进制表示的最后一位是否为1时,可以采用与运算来达到这个目的。具体实现

代码如下:

程序的运行结果如下:(www.xing528.com)

3

1

算法性能分析:

这种方法的时间复杂度为O(N),其中,N代表二进制数的位数。

方法二:与操作法

给定一个数n,每进行一次n&(n-1)计算,其结果中都会少了一位1,而且是最后一位。例如,n=6,其对应的二进制表示为110,n-1=5,对应的二进制表示为101,n&(n-1)运算后的二进制表示为100,其效果就是去掉了110中最后一位1。可以通过不断地用n&(n-1)操作去掉n中最后一位1的方法求出n中1的个数,实现代码如下:

算法性能分析:

这种方法的时间复杂度为O(m),其中,m为二进制数中1的个数,显然,当二进制数中1的个数比较少的时候,这种方法有更高的效率

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈