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


我们需要编写一个JavaScript函数,该函数接收一个正整数n作为输入。该函数应该找到并返回n的二进制表示中任意两个相邻的1之间最长的距离。

如果没有两个相邻的1,则应返回0。

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

例如:

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

因为:

  • 22的二进制代码是10110
  • 第一对相邻的1是“10110”,距离为2。
  • 第二对相邻的1是“10110”,距离为1。
  • 答案是这两个距离中最大的一个,即2。

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

示例

const num = 22;
const binaryGap = (num = 1) => {
   let last = -1;
   let ans = 0; // go through every bit
   for (let i = 0; i < 32; i++) {
      // check whether the bit is `1`. //
      if true, calculate the longest distance with
      // previous `1` if `1` was previously found.
      if ((num >> i) & 1 > 0) {
         if (last >= 0) {
            ans = Math.max(ans, i - last);
         }
         last = i;
      }
   }
   return ans;
};
console.log(binaryGap(num));

输出

控制台的输出将是:

2

更新于:2020年11月21日

317 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告