美文网首页
二进制间距

二进制间距

作者: WAI_f | 来源:发表于2020-05-29 00:07 被阅读0次

    题目:

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

    示例:

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

    解题方法:

    最近做题感觉有点力不从心了,可能是没是看看中等题然后发现全是复杂的方法,影响了我的心态,晚上本来想找几道简单题提升一下信心,然后就气的打LOL去了。好在我悬崖勒马,输了两把果断退游戏,继续刷题,终于找到这道题了!难度嘛,肯定是简单题,简单题离刷完还有很长的路,这道题就是一位位取值,然后记录两个1之间的距离,最终跑出来的结果还是很OK的。

    代码和结果:

    class Solution {
    public:
        int binaryGap(int N) {
            int i=0;
            int maxL=0;
            int last=-1;
            while(N)
            {
                int b=N&1;
                if(b==1)
                {
                    if(last==-1)
                        last=i;
                    else
                    {
                        maxL=(i-last)>maxL?(i-last):maxL;
                        last=i;
                    } 
                }
                i++;
                N=N>>1;
            }
            return maxL;
        }
    };
    
    运行结果:

    原题链接:https://leetcode-cn.com/problems/binary-gap/

    相关文章

      网友评论

          本文标题:二进制间距

          本文链接:https://www.haomeiwen.com/subject/tdciahtx.html