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

JavaScript에서 원하는 합계가 있는 이진 하위 배열

<시간/>

문제

이진 배열 arr을 첫 번째 인수로, 숫자 target을 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다.

우리의 함수는 배열 arr에 존재하는 하위 배열의 수를 세어야 하며, 그 요소의 합은 count와 같습니다. 마침내 이 개수를 반환해야 합니다.

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

인 경우

입력

const arr = [1, 0, 1, 0, 1];
const target = 2;

출력

const output = 4;

출력 설명

원하는 하위 배열이 다음과 같기 때문입니다.

[1,0,1][1,0,1,0]
[0,1,0,1]
[1,0,1]

예시

const arr = [1, 0, 1, 0, 1];
const target = 2;
const countSubarrays = (arr = [], target = 1) => {
   const map = {}
   let sum = 0
   let count = 0
   for (const num of arr) {
      map[sum] = (map[sum] || 0) + 1
      sum += num
      count += map[sum - target] || 0
   }
   return count
};
console.log(countSubarrays(arr, target));

출력

4