【LeetCode】868. 二進位制間距
阿新 • • 發佈:2018-11-03
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;
}
};