每个人的Python:数学、算法和游戏编程训练营
上QQ阅读APP看书,第一时间看更新

4.1.4 代码改进——求二进制数中1的最长间距

现在我们找到二进制数中所有1的个数已经不是难事,那么我们来增加一点难度,给定一个正整数,你能否计算出此正整数中两个连续的1之间的最长距离。例如,对于二进制数1110110,其中连续两个1之间的最大距离为2。

本题难度不大,但是在解题过程中,存在一些陷阱。例如,对于二进制数1000,其中只有一个1,即不存在两个连续的1,因此对于类似1000这样的数值,本题的答案为0。

要找到一个二进制数中连续两个1的最长间距,我们可以通过循环累加的方法来记录间距,解题思路简单总结如下:

(1)首先对二进制数的每一位进行遍历,可以采用位移运算实现。

(2)当遇到一个1时,开始进行计数,并将之前的计数清零,在清零前,如果当前距离最长,则需要将当前距离存储下来。

(3)遍历结束,将所存储下来的最长距离返回。

示例代码如下:

需要注意,如以上代码所示,cur变量的初始值设置为‒1,这样做是为了规避前面我们所说的陷阱,一个二进制数第一次出现1时不会被存储记录。