Back to all solutions

#1282 - Group the People Given the Group Size They Belong To

Problem Description

There are n people that are split into some unknown number of groups. Each person is labeled with a unique ID from 0 to n - 1.

You are given an integer array groupSizes, where groupSizes[i] is the size of the group that person i is in. For example, if groupSizes[1] = 3, then person 1 must be in a group of size 3.

Return a list of groups such that each person i is in a group of size groupSizes[i].

Each person should appear in exactly one group, and every person must be in a group. If there are multiple answers, return any of them. It is guaranteed that there will be at least one valid solution for the given input.

Solution

/**
 * @param {number[]} groupSizes
 * @return {number[][]}
 */
var groupThePeople = function(groupSizes) {
  const map = new Map();
  const grouped = [];

  for (let i = 0; i < groupSizes.length; i++) {
    const size = groupSizes[i];

    map.set(size, map.has(size) ? [...map.get(size), i] : [i]);

    if (map.get(size).length === size) {
      grouped.push(map.get(size));
      map.delete(size);
    }
  }

  return grouped;
};