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

JavaScript에서 0과 1이 있는 연속 하위 배열

<시간/>

문제:

바이너리 배열 arr(0 또는 1로만 구성된 배열)을 받는 JavaScript 함수를 작성해야 합니다. 우리의 함수는 동일한 수의 1과 0으로 구성된 배열에서 인접한 하위 배열의 길이를 반환해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const arr = [1, 0, 0, 1, 0, 1, 0, 0];

그러면 출력은 다음과 같아야 합니다. -

const output = 6;

출력 설명

배열의 처음 6개 요소는 1, 0, 0, 1, 0, 1입니다(세 개의 1 및 세 개의 0)

예시

이에 대한 코드는 -

const arr = [1, 0, 0, 1, 0, 1, 0, 0];
const findMaxLength = (arr = []) => {
   const { length } = arr;
   if (length < 2){
      return 0
   };
   const map = new Map();
   map.set(0, -1);
   let sum = 0;
   let max = 0;
   for (var i = 0; i < length; i++) {  
      sum += arr[i] === 0 ? -1 : 1;
      if (map.has(sum)) {
         max = Math.max(max, i - map.get(sum));
      } else {
         map.set(sum, i);
      };
   };
   return max;
};
console.log(findMaxLength(arr));

코드 설명

여기서 우리는 0을 -1로, 1을 1로 생각하고 서로 다른 창에 대한 합을 계산했습니다. 합이 0일 때 하위 배열은 0과 1의 수가 같아야 한다는 것을 알았습니다.

출력

콘솔의 출력은 -

6