Leetcode 868. 二进制间距
Published on 2022-05-23 14:51 in 分类: C/C++ with 萧海~
分类: C/C++

Leetcode 868. 二进制间距

    在这里插入图片描述
    给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。

    如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

    示例 1:

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

    示例 2:

    输入:n = 8
    输出:0
    解释:8 的二进制是 "1000"
    在 8 的二进制表示中没有相邻的两个 1,所以返回 0 。

    示例 3:

    输入:n = 5
    输出:2
    解释:5 的二进制是 "101"

    提示:

    • 1 <= n <= 10^9

    Code:

    class Solution {
    public:
    vector<int> i2b(int num)
    {
    vector<int>res;
    while (1) {
    res.push_back(num%2);
    num=num/2;
    if(num==0)
    break;
    }
    reverse(res.begin(),res.end());
    return res;
    }
    int binaryGap(int n)
    {
    vector<int>res=i2b(n);
    int cnt=0;
    int maxlen=0;
    int lasti=-1;
    for(int i=0;i<res.size();i++)
    {
    if(res[i]==1)
    {
    cnt++;
    if(cnt>=2)
    {
    if(lasti!=-1)
    maxlen=max(maxlen,i-lasti);
    cnt=1;
    }
    lasti=i;
    }
    }
    cout<<maxlen<<endl;
    return maxlen;
    }
    };
    posted @   萧海~  阅读(24)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 全程不用写代码,我用AI程序员写了一个飞机大战
    · DeepSeek 开源周回顾「GitHub 热点速览」
    · 记一次.NET内存居高不下排查解决与启示
    · 物流快递公司核心技术能力-地址解析分单基础技术分享
    · .NET10 - 预览版1新功能体验(一)
    历史上的今天:
    2021-05-23 3 万字 + 100 张图带你彻底搞懂 TCP 面试题(强烈建议收藏)
    2021-05-23 MFC OpenCV:显示图片的3种方法(详细)
    点击右上角即可分享
    微信分享提示
    电磁波切换