【LeetCode】868. 二进制间距

版权声明:made by YYT https://blog.csdn.net/qq_37621506/article/details/83536634

1.题目

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

2.思路

step1:把数字换算成二进制放在向量中;
step2:把向量中等于一的数字的索引放入新的向量中;
step3:遍历新的向量,求前后元素之差,取最大值即可

3.代码

class Solution {
public:
    int binaryGap(int N){
    int div=N;
    vector<int>vec;
    vector<int>s;
    int i=0;
    while(div){
        int n=div%2;
        vec.push_back(n);
        if(n==1){
            s.push_back(i);
        }
        div/=2;
        i++;
    }
    vector<int>::iterator it;
    int sum=0;
    for(it=s.begin();it!=s.end();it++){
        cout<<*it;
    }
    cout<<endl;
    for(int i=1;i<s.size();i++){
        int x=s[i]-s[i-1];
        sum=max(sum,x);
    }
    vector<int>::iterator t;
    for(t=vec.begin();t!=vec.end();t++){
        cout<<*t;
    }
    cout<<endl;
    cout<<"sum:"<<sum<<endl;
    return sum;
}
};

4.优秀案例

class Solution {
public:
    int binaryGap(int N) {
        int last = -1, ans = 0;
        for(int i = 0;i < 32; ++i) {
            if((N & (1 << i))  > 0) {
                if(last >= 0) {
                    ans = max(ans, i - last);
                }
                last = i;
            }
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_37621506/article/details/83536634