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

JavaScript 그룹 배열 - 정의된 가장자리를 사용하여 이동할 수 있는 숫자 집합을 찾습니다.

<시간/>

다음 입력 및 출력 배열을 고려하십시오 -

const input = ["0:3", "1:3", "4:5", "5:6", "6:8"]; const output = [
   [0, 1, 3],
   [4, 5, 6, 8]
];

각 숫자를 그래프의 노드로, 각 쌍 x:y를 노드 x와 y 사이의 간선으로 간주하여 정의된 간선을 사용하여 이동할 수 있는 숫자 집합을 찾아야 합니다.

즉, 그래프 이론 용어로 이러한 그래프 내에서 별개의 연결된 구성 요소를 찾습니다. 예를 들어 위의 배열에서는 4에서 0으로 이동할 방법이 없으므로 서로 다른 그룹에 있지만 이동하는 방법은 있습니다. 1에서 0(3을 통해)이므로 동일한 그룹에 있습니다."원하는 출력을 반복하려면 잠재적으로 임의의 입력 집합을 기반으로 하는 횡단 가능한 노드 그룹입니다.

주어진 입력에서 원하는 출력을 구성하는 JavaScript 함수를 작성해야 합니다.

예시

const input = ["0:3", "1:3", "4:5", "5:6", "6:8"];
const groupRange = (arr = []) => {
   const res = [[]];
   let count = 0;
   const a = [0];
   let array = arr.map(el => el.split(':').sort((a, b) => a - b)). sort((a, b) => a[0] - b[0]); array.forEach(el => {
      if (el[0] > a[a.length - 1]) {
         res.push(el);
          a.push(el[1]);
         count++;
      } else {
         res[count] = res[count].concat(el);
         a[a.length - 1] = el[1];
      };
   });
   return res.map(el => [...new Set(el)].sort((a, b) => a - b));
}
console.log(groupRange(input));

출력

콘솔의 출력은 -

[ [ '0', '1', '3' ], [ '4', '5', '6', '8' ] ]