Back to all solutions

#2097 - Valid Arrangement of Pairs

Problem Description

You are given a 0-indexed 2D integer array pairs where pairs[i] = [starti, endi]. An arrangement of pairs is valid if for every index i where 1 <= i < pairs.length, we have endi-1 == starti.

Return any valid arrangement of pairs.

Note: The inputs will be generated such that there exists a valid arrangement of pairs.

Solution

/**
 * @param {number[][]} pairs
 * @return {number[][]}
 */
var validArrangement = function(pairs) {
  const graph = new Map();
  const degree = new Map();

  for (const [start, end] of pairs) {
    if (!graph.has(start)) graph.set(start, []);
    graph.get(start).push(end);

    degree.set(start, (degree.get(start) || 0) + 1);
    degree.set(end, (degree.get(end) || 0) - 1);
  }

  let startNode = pairs[0][0];
  for (const [node, deg] of degree) {
    if (deg > 0) {
      startNode = node;
      break;
    }
  }

  const result = [];
  helper(startNode);

  return result.reverse();

  function helper(node) {
    while (graph.get(node)?.length) {
      const next = graph.get(node).pop();
      helper(next);
      result.push([node, next]);
    }
  }
};