スナップ-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を取ります.
ソースコード
正の整数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;
}
};