スナップ-868バイナリピッチ


タイトルの説明
正の整数nが与えられ、nのバイナリ表現の2つの隣接する1間の最長距離が見つかり、返される.隣接する2つの1が存在しない場合は、0を返します.
0のみが2つの1点を隔てている場合(0は存在しない可能性がある)、この2つの1は互いに隣接していると考えられる.2つの1間の距離は、それらのバイナリ表現における位置の絶対差である.たとえば、1001の2つの1の距離は3です.

入力:n=22出力:2解釈:22のバイナリは「10110」です.22のバイナリ表現では、2対の隣接する1を構成する3つの1がある.第1の対が隣接する1では、2つの1の間の距離は2である.第2の対が隣接する1では、2つの1の間の距離は1である.答えは2つの距離の中で最も大きい、つまり2を取ります.
ソースコード
class Solution {
     
public:
    int binaryGap(int n) {
     
    	//           n 0 1
        int arr[100]={
     0};
        int i=0,count=0;//count    n 1   
        while(n){
     
            if(n&1)  //     n      1
            {
     
                arr[i]++;
                count++;   
            }
            i++;
            n=n>>1;    //   n     
        }
        if(count<=1) return 0;
        int sum=0; //sum      
        for(int j=0;j<i;j++)
        {
     
            if(arr[j]==1)
            {
     
                for(int k=j+1;k<i;k++)
                {
     
                    if(arr[k]==1)
                    {
     
                        if(k-j>sum) sum=k-j;
                        break;
                    }
                }
            }
        }
        return sum;
    }
};