版权声明: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;
}
};