leetcode 算法题868 (简单226) 二进制间距

leetcode 算法题868 (简单226) 二进制间距leetcode算法题868(简单226)二进制间距题目介绍给定一个正整数N,找到并返回N的二进制表示中两个连续的1之间的最长距离

leetcode 算法题868 (简单226) 二进制间距

  • 题目介绍
给定一个正整数 N,
找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回 0 。
  • 示例

输入:22
输出:2
解释:22 的二进制是 0b10110 。在 22 的二进制表示中,有三个 1,组成两对连续的 1 。第一对连续的 1 中,两个 1 之间的距离为 2 。第二对连续的 1 中,两个 1 之间的距离为 1 。答案取两个距离之中最大的,也就是 2 。

输入:5
输出:2
解释:5 的二进制是 0b101 。

输入:6
输出:1
解释:6 的二进制是 0b110 。

输入:8
输出:0
解释:8 的二进制是 0b1000 。在 8 的二进制表示中没有连续的 1,所以返回 0 。

  • 注意

1 <= N <= 10^9

  • 解法一
/** * @param {number} N * @return {number} */
var binaryGap = function(N) { 
   
    let str = N.toString(2), max = 0, count = i = 1;
    while(i < str.length) { 
   
      if(str[i++] === '0') { 
   
        count++;
      } else { 
   
        max = Math.max(count, max);
        count = 1;
      }
    }
    return max;
};

执行用时 : 104 ms, 在所有 JavaScript 提交中击败了16.87%的用户

内存消耗 : 33.9 MB, 在所有 JavaScript 提交中击败了17.39%的用户

  • 解法二
/** * @param {number} N * @return {number} */
var binaryGap = function(N) { 
   
  if(!(N & (N - 1))) { 
   
    return 0;
  }
  while(!(N & 1)) { 
   
    N = N >> 1;
  }
  let count = max = 1;
  N = N >> 1;
  while(N) { 
   
    if(N & 1) { 
   
      max = Math.max(max, count);
      count = 1;
    } else { 
   
      count++;
    }
    N = N >> 1;
  }
  return max;
};

执行用时 : 72 ms, 在所有 JavaScript 提交中击败了93.98%的用户

内存消耗 : 33.7 MB, 在所有 JavaScript 提交中击败了43.48%的用户

今天的文章leetcode 算法题868 (简单226) 二进制间距分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68068.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注