Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

바이너리 JavaScript에서 1 사이의 가장 긴 거리

<시간/>

양의 정수, 예를 들어 n인 JavaScript 함수를 작성해야 합니다. 이 함수는 n의 이진 표현에서 두 개의 인접한 1 사이의 가장 긴 거리를 찾아서 반환해야 합니다.

두 개의 인접한 1이 없으면 0을 반환해야 합니다.

두 개의 1은 0으로만 구분되는 경우 인접합니다(0은 없을 수도 있음). 두 1 사이의 거리는 비트 위치 간의 절대 차이입니다. 예를 들어, "1001"에 있는 두 개의 1은 거리가 3입니다.

예를 들어 -

입력이 22이면 출력은 2,

왜냐하면,

  • 22의 바이너리 코드는 10110입니다.
  • 1의 첫 번째 인접한 쌍은 거리가 2인 "10110"입니다.
  • 두 번째로 인접한 1 쌍은 거리가 1인 "10110"입니다.
  • 답은 이 두 거리 중 가장 큰 거리인 2입니다.

"10110"은 밑줄이 그어진 두 개의 1을 구분하는 1이 있기 때문에 유효한 쌍이 아닙니다.

예시

const num = 22;
const binaryGap = (num = 1) => {
   let last = -1;
   let ans = 0; // go through every bit
   for (let i = 0; i < 32; i++) {
      // check whether the bit is `1`. //
      if true, calculate the longest distance with
      // previous `1` if `1` was previously found.
      if ((num >> i) & 1 > 0) {
         if (last >= 0) {
            ans = Math.max(ans, i - last);
         }
         last = i;
      }
   }
   return ans;
};
console.log(binaryGap(num));

출력

콘솔의 출력은 -

2