二进制JavaScript中1s之间的最长距离

我们需要编写一个以正整数(例如n)表示的JavaScript函数。该函数应找到并返回n的二进制表示形式中任意两个相邻1之间的最长距离。

如果没有两个相邻的1,那么我们必须返回0。

如果只有1将0分隔开,则两个1相邻(可能没有0)。两个1之间的距离是它们的位位置之间的绝对差。例如,“ 1001”中的两个1的距离为3。

例如-

如果输入为22,则输出应为2,

因为,

  • 22的二进制代码是10110

  • 相邻的第一对1是距离为2的“ 10110”。

  • 第二个相邻的1对是距离为1的“ 10110”。

  • 答案是这两个距离中最大的一个,即2。

请注意,“ 10110”不是有效的对,因为用1分隔带下划线的两个1。

示例

const num = 22;
const binaryGap = (num = 1) => {
   let last = -1;
   let ans = 0; //仔细检查
   for (let i = 0; i < 32; i++) {
      // check whether the bit is `1`. //
      if true, calculate the longest distance with
      //如果先前找到“ 1”,则返回上一个“ 1”。
      if ((num >> i) & 1 > 0) {
         if (last >= 0) {
            ans = Math.max(ans, i - last);
         }
         last = i;
      }
   }
   return ans;
};
console.log(binaryGap(num));

输出结果

控制台中的输出将是-

2