JavaScript를 사용하여 이진 간격 해결

다음은 부호화에 대한 바이너리 갭 문제를 해결하기 위한 단계별 솔루션입니다. 도움이 되길 바랍니다!

의문

양의 정수 N 내의 이진 간격은 N의 이진 표현에서 양쪽 끝이 1로 둘러싸인 연속 0의 최대 시퀀스입니다.

예를 들어, 숫자 9는 이진 표현 1001을 가지며 길이 2의 이진 간격을 포함합니다. 숫자 529는 이진 표현 1000010001을 가지며 길이 4 중 하나와 길이 3의 두 이진 간격을 포함합니다. 숫자 20은 이진 표현 10100을 가지며 다음을 포함합니다. 길이가 1인 하나의 이진 갭. 숫자 15는 이진 표현(1111)을 갖고 이진 갭이 없습니다. 숫자 32는 이진수 표현이 100000이고 이진수 간격이 없습니다.

함수 작성:

함수 솔루션(N);

양의 정수 N이 주어지면 가장 긴 이진 간격의 길이를 반환합니다. N에 이진 간격이 포함되어 있지 않으면 함수는 0을 반환해야 합니다.

예를 들어, N = 1041이 주어지면 함수는 5를 반환해야 합니다. N은 이진수 표현이 10000010001이므로 가장 긴 이진 간격의 길이는 5이기 때문입니다. N = 32가 주어지면 함수는 0을 반환해야 합니다. 바이너리 갭이 없습니다.

다음 가정에 대한 효율적인 알고리즘을 작성하십시오.

N은 [1..2,147,483,647] 범위 내의 정수입니다.

고장
여기서 우리의 예는 숫자 10041입니다.
이 문제를 해결하려면 0의 수를 세는 데 도움이 되는 포인터 i와 j가 필요합니다.

그 후에 우리는 다음을 수행해야 합니다.
  • 이진수 10041을 문자열로 변환
  • 포인터 i 및 j 시작
  • 포인터 i 및 j를 0으로 설정
  • 1이 될 때까지 j 증가
  • j가 1에 도달하면 i의 값을 j와 같게 설정(i=j)
  • 첫 번째 0 세트의 카운트 값인 (j-i-1)의 값을 저장합니다
  • .
  • 전체 어레이에 대해 반복합니다
  • .

    솔루션 코드
    위의 분석에서 코드 솔루션은 다음과 같습니다.

    function solution(N){
    
    
        let binaryN = (N >>>0).toString(2);  //Changes the binary number to string 
    
        let maxGap = 0;                     //sets the maximum number of binary gaps to 0
    
        for(let i = 0; i<binaryN.length; i++){                //sets the counter i to zero and loops through the entire binary length while incrementing by 1 
    
            for(let j=i; j<binaryN.length; j++){             //sets the counter j to i and loops through the entire binary length while incrementing by 1 
    
                if(binaryN[i] == 1 && binaryN[j] && i!=j){  //checks whether both i and j are equal to 1 but not equal to each other
    
                    if(maxGap< j-i-1){                     //Calculates the maximum gap
    
                        maxGap = j-i-1;
                    }
                    i=j;
                }
            }
        }
        return maxGap;
    }
    

    좋은 웹페이지 즐겨찾기