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

JavaScript에서 간격 배열의 교차점 찾기

<시간/>

문제

쌍으로 분리되고 정렬된 간격의 두 배열 arr1 및 arr2를 받는 JavaScript 함수입니다.

닫힌 구간 [a, b](a <=b)는 a <=x <=b인 실수 x의 집합을 나타냅니다.

두 개의 닫힌 간격의 교집합은 비어 있거나 닫힌 간격으로 표시될 수 있는 실수 집합입니다. 예를 들어 [1, 3]과 [2, 4]의 교집합은 [2, 3]입니다.) 우리 함수는 이 두 간격 배열의 교집합을 반환해야 합니다.

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

인 경우
const arr1 = [[0,2],[5,10],[13,23],[24,25]];
const arr2 = [[1,5],[8,12],[15,24],[25,26]];

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

const output = [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]];

예시

이에 대한 코드는 -

const arr1 = [[0,2],[5,10],[13,23],[24,25]];
const arr2 = [[1,5],[8,12],[15,24],[25,26]];
const findIntersection = function (A, B) {
   const res = []
   let i = 0
   let j = 0
   while (i < A.length && j < B.length) {
      const [a, b] = A[i]
      const [c, d] = B[j]
      const lo = Math.max(a, c)
      const hi = Math.min(b, d)
      if (lo <= hi) {
         res.push([Math.max(a, c), Math.min(b, d)])
      }
      if (b < d) {
         i++
      } else {
         j++
      }
   }
   return res
};
console.log(findIntersection(arr1, arr2));

출력

콘솔의 출력은 -

[
   [ 1, 2 ],
   [ 5, 5 ],
   [ 8, 10 ],
   [ 15, 23 ],
   [ 24, 24 ],
   [ 25, 25 ] 
]