zoukankan      html  css  js  c++  java
  • Leetcode(868)-二进制间距

    给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。 

    如果没有两个连续的 1,返回 0 。

    示例 1:

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

    示例 2:

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

    示例 3:

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

    思路:这道题是比较简单的题目,我们只需要将数字转为二进制,然后记录里面1的最大距离。

    int binaryGap(int N) 
    {
        string s;
        for(int a = N; a ;a = a/2)
        {
            s=s+(a%2?'1':'0');
        }
        reverse(s.begin(),s.end());
        int gap=0,flag=0,max=0;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='1' || flag==1)
            {
                if(flag==1)
                {
                    gap++;
                    if(s[i]=='1')
                    {
                        flag=0;
                        max=max>gap?max:gap;
                        gap=0;
                    }
                }
                if(s[i]=='1' && flag==0)
                    flag=1;
            }
        }
    return max;
    }

    上述方法比较繁琐。是用一个flag作为标志,来判断是第一个还是第二个。下面是比较简单的方法

    是通过记录上一个1出现的位置pre,只需要用当前的i减去pre,就是这两个1的距离,这样就不用判断是第1个还是第2个了,并且还可以连续判断

     int binaryGap(int N) 
    {
        string s;
        for(int a = N; a ;a = a/2)
        {
            s=s+(a%2?'1':'0');
        }
        reverse(s.begin(),s.end());
        int gap=0,pre=-1;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='1')
            {
                if(pre>=0)
                    gap=max(gap,i-pre);
                pre=i;
            }
        }
    return gap;
    }
  • 相关阅读:
    理清一下JavaScript面向对象思路
    IE的CSS渲染跟其它浏览器有什么不同
    页面元素的CSS渲染优先级
    push与createElement性能比较
    关于JavaScript的push()函数
    关于JavaScript的沙箱模式
    JavaScript SandBox沙箱设计模式
    用live()方法给新增节点绑定事件
    深入JavaScript对象创建的细节
    Keras class_weight和sample_weight用法
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9313600.html
Copyright © 2011-2022 走看看