如何使用 JavaScript 解决二进制间隙

如何使用 JavaScript 解决二进制间隙

在编码训练营 4 个月后,我决定开始做数据结构和算法问题,为我的技术面试做准备。

我使用的一些网站是:

  1. 可编码性
  2. 黑客等级

有什么比教别人更好地理解问题的方法。

我将使用 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] 范围内的整数。

分解问题

  1. 将整数 N 转换为二进制
  2. 循环遍历二进制以计算 1 值之间的零数
  3. 返回二进制中最多的零个数
  4. 如果没有二进制间隙,则返回零

解决方案

让我们分解解决方案

声明变量 maxZeros。这是二进制间隙中零的最大计数。将其初始化为零。

循环

我们的一个限制是二进制间隙必须由 1 限制,因此我们需要一种方法来处理“零间隙必须由 1 限制”的要求。

如果整数 N 的末尾有一个零,这意味着它是一个偶数,因此使用 while 循环来检查条件,N 不等于零并且 N 是偶数。一旦满足条件,使用无符号右移位运算符在每个循环中修剪最后一位,直到条件不满足。(N 为奇数)

FOR循环

一旦整数不满足while循环条件,就跳转到for循环。

在 for 循环中,将计数初始化为零,并检查条件,N 不等于 0,然后使用无符号右移运算符将二进制移一位。检查 if 语句,如果 N 为偶数,则将计数加 1,但如果 N 为奇数,则计数重置为零。循环继续直到 N 等于 0,则不满足条件。

返回最高的零计数

使用 Math 方法,max 返回最高的零计数。声明 maxZeros 变量等于每个循环的最高零计数。

Print out of the maximum Zeros and current count on the console for every loop

当我们控制台记录 maxZeros 和 curr 时,它返回 maxZeros 作为每个循环的最高零计数。

资源

位运算符。我发现下面的视频对理解位运算符非常有帮助。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/38548/22572211

posted @   哈哈哈来了啊啊啊  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示