1. 程式人生 > >【LeetCode】868. 二進位制間距

【LeetCode】868. 二進位制間距

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; } };