0
点赞
收藏
分享

微信扫一扫

leetcode 868. Binary Gap

三千筱夜 12小时前 阅读 1

问题描述

给定一个正整数 n,找到其中最大的二进制位上的间隙长度。二进制位上的间隙是指在二进制表示中,两个 1 之间的 0 的数量。

示例 1: 输入: n = 22 输出: 2 解释: 22 的二进制是 10110。 在 22 的二进制表示中,有四个间隙 3, 1, 1, 和 2。 最大间隙是 2。

示例 2: 输入: n = 5 输出: 2 解释: 5 的二进制是 101。 在 5 的二进制表示中,有六个间隙 2, 2, 1, 1, 2, 和 0。 最大间隙是 2。

示例 3: 输入: n = 6 输出: 1 解释: 6 的二进制是 110。 在 6 的二进制表示中,有五个间隙 1, 1, 2, 1, 和 0。 最大间隙是 1。

示例 4: 输入: n = 8 输出: 0 解释: 8 的二进制是 1000。 在 8 的二进制表示中,没有间隙。

解法一

解题思路:

我们需要遍历整数的二进制表示,找到 1 之间的 0 的最大数量。我们可以从最低位开始,一旦发现 1,就开始计数 0 的数量,直到下一个 1 出现。

/*
 * @lc app=leetcode.cn id=868 lang=javascript
 *
 * [868] Binary Gap
 */

// @lc code=start
function binaryGap(n) {
    let maxGap = 0, currentGap = 0;
    let seenOne = false;
    for (let i = 0; i < 32; i++) {
        if ((n & (1 << i)) !== 0) {
            if (seenOne) {
                maxGap = Math.max(maxGap, currentGap);
                currentGap = 0;
            } else {
                seenOne = true;
            }
        } else if (seenOne) {
            currentGap++;
        }
    }
    return maxGap;
}
// @lc code=end
举报

相关推荐

0 条评论