如何使用 JavaScript 解决二进制间隙
在编码训练营 4 个月后,我决定开始做数据结构和算法问题,为我的技术面试做准备。
我使用的一些网站是:
有什么比教别人更好地理解问题的方法。
我将使用 JavaScript 解决关于可编码性的二进制差距问题
问题
正整数 N 中的二进制间隙是在 N 的二进制表示中两端被 1 包围的连续零的任何最大序列。
例如,数字 9 具有二进制表示 1001 并包含长度为 2 的二进制间隙。数字 529 具有二进制表示 1000010001 并包含两个二进制间隙:一个长度为 4 和一个长度为 3。数字 20 具有二进制表示 10100 并包含一个长度为 1 的二进制间隙。数字 15 具有二进制表示 1111 并且没有二进制间隙。数字 32 具有二进制表示 100000 并且没有二进制间隙。
写一个函数:
函数解(N);
即,给定一个正整数 N,返回其最长二进制间隙的长度。如果 N 不包含二进制间隙,则该函数应返回 0。
例如,给定 N = 1041,函数应返回 5,因为 N 具有二进制表示 10000010001,因此其最长二进制间隙的长度为 5。给定 N = 32,函数应返回 0,因为 N 具有二进制表示“100000”,因此没有二进制间隙。
为以下假设编写一个有效的算法:
N 是 [1..2,147,483,647] 范围内的整数。
分解问题
- 将整数 N 转换为二进制
- 循环遍历二进制以计算 1 值之间的零数
- 返回二进制中最多的零个数
- 如果没有二进制间隙,则返回零
解决方案
让我们分解解决方案
声明变量 maxZeros。这是二进制间隙中零的最大计数。将其初始化为零。
循环
我们的一个限制是二进制间隙必须由 1 限制,因此我们需要一种方法来处理“零间隙必须由 1 限制”的要求。
如果整数 N 的末尾有一个零,这意味着它是一个偶数,因此使用 while 循环来检查条件,N 不等于零并且 N 是偶数。一旦满足条件,使用无符号右移位运算符在每个循环中修剪最后一位,直到条件不满足。(N 为奇数)
FOR循环
一旦整数不满足while循环条件,就跳转到for循环。
在 for 循环中,将计数初始化为零,并检查条件,N 不等于 0,然后使用无符号右移运算符将二进制移一位。检查 if 语句,如果 N 为偶数,则将计数加 1,但如果 N 为奇数,则计数重置为零。循环继续直到 N 等于 0,则不满足条件。
返回最高的零计数
使用 Math 方法,max 返回最高的零计数。声明 maxZeros 变量等于每个循环的最高零计数。
当我们控制台记录 maxZeros 和 curr 时,它返回 maxZeros 作为每个循环的最高零计数。
资源
位运算符。我发现下面的视频对理解位运算符非常有帮助。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/38548/22572211
标签:返回,间隙,二进制,JavaScript,运算符,计数,循环 From: https://www.cnblogs.com/amboke/p/16718605.html