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

JavaScript에서 정렬된 간격 배열에 새 간격 삽입

<시간/>

이 질문의 목적을 위해 간격을 첫 번째 숫자가 두 번째 숫자보다 항상 작은 두 숫자의 배열로 정의합니다.

예를 들어 -

[4, 6], [2, 3], [6, 8], [2, 7], [1, 8] are all examples of valid intervals.

시작 시간(각 간격의 첫 번째 요소)에 따라 정렬된 간격 배열이 있다고 가정합니다.

배열의 간격은 겹치지 않습니다. 즉, 임의의 두 개의 인접 간격에 대해

[m, n], [x, y]
m < n < x < y

따라서 이러한 간격 배열의 한 가지 예는 다음과 같을 수 있습니다. -

const arr = [[ 2, 4], [5, 7], [9, 10], [13, 17]];

첫 번째 인수로 간격 배열을 취하고 두 번째 인수로 단일 간격을 취하는 JavaScript 함수를 작성해야 합니다.

그런 다음 함수는 배열의 올바른 위치에 간격을 삽입하고 배열의 겹치지 않는 속성을 유지해야 합니다.

필요한 경우 배열 간격이 겹치지 않도록 유지하기 위해 배열에서 둘 이상의 간격을 병합할 수 있습니다.

예를 들어, 위의 간격 배열에 대해 삽입해야 하는 간격이 [6, 13]이면 출력은 다음과 같아야 합니다. -

const output = [[2, 4], [5, 17]];

예시

다음은 코드입니다 -

const arr = [[2, 4], [5, 7], [9, 10], [13, 17]];
const interval = [6, 13];
const insertWithin = (arr = [], interval = []) => {
   const res = [];
   let ind = 0;
   while (arr[ind] && arr[ind][1] < interval[0]) {
      res.push(arr[ind]);
      ++ind;
   };
   let start = interval[0];
   let end = interval[1];
   while (arr[ind] && arr[ind][0] <= interval[1]) {
      start = Math.min(start, arr[ind][0]);
      end = Math.max(end, arr[ind][1]);
      ++ind;
   }
   res.push([start, end]);
   while (arr[ind]) {
      res.push(arr[ind]);
      ++ind;
   }
   return res;
};
console.log(insertWithin(arr, interval));

출력

다음은 콘솔 출력입니다 -

[[2, 4], [5, 17]]