アルゴリズム:ゼロギャップの長さを検索する


自然数にNを入力し、Nをバイナリで表す場合、1と1の間で連続して0に入る回数をzero gapと呼ぶ.ゼロギャップ長の最大値を出力する関数を作成します.
ex)9はバイナリ1001、出力値は2です.1041は出力値5である.

Solution

function solution(N) {
  let q = N;
  let remainder;
  let reverseBinary = [];
  let flag = false;
  let count = 0;
  let candidate = [];
  
  // Convert N to binary (reverse order)
  while (q != 0) {
    remainder = q % 2;
    q = Math.floor(q / 2);
    reverseBinary.push(remainder);
  }
  
  // Measure Zero gap length.
  if (reverseBinary[0] == 1) {
    for (let i = 0; i < reverseBinary.length; i++) {
      if (reverseBinary[i] == 0) {
        count = count + 1;
      } else {
        candidate.push(count);
        count = 0;
      }
    }
  } else {
    for (let i = 0; i < reverseBinary.length; i++) {
      if (reverseBinary[i] == 1) {
        flag = true;
      }
      if (flag) {
        if (reverseBinary[i] == 0) {
          count = count + 1;
        } else {
          candidate.push(count);
          count = 0;
        }
      }
    }
  }

  // Return maximum value
  return Math.max(
    ...candidate.map((ele) => {
      return ele * 1;
    })
  );
}