Group the People Given the Group Size They Belong To - Problem

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.

Input & Output

Example 1 — Mixed Group Sizes
$ Input: groupSizes = [3,3,3,3,3,1,3]
Output: [[5],[0,1,2],[3,4,6]]
💡 Note: Person 5 wants group size 1, so gets their own group. People 0,1,2 all want size 3, so form one group. People 3,4,6 also want size 3, forming another group.
Example 2 — All Same Size
$ Input: groupSizes = [2,1,3,3,3,2]
Output: [[1],[0,5],[2,3,4]]
💡 Note: Person 1 wants size 1. People 0,5 want size 2. People 2,3,4 want size 3. Each gets grouped with others of same preference.
Example 3 — Edge Case Small
$ Input: groupSizes = [1]
Output: [[0]]
💡 Note: Single person wants group size 1, so forms their own group.

Constraints

  • groupSizes.length == n
  • 1 ≤ n ≤ 500
  • 1 ≤ groupSizes[i] ≤ n

Visualization

Tap to expand
Group People by Group Size INPUT groupSizes array: Index: 0 1 2 3 4 5 6 Value: 3 3 3 3 3 1 3 7 People (IDs 0-6) P0 P1 P2 P3 P4 P5 P6 P5 needs group of size 1 Others need group of size 3 [3,3,3,3,3,1,3] ALGORITHM (Greedy) 1 Create HashMap Map: groupSize --> list of people 2 Iterate & Group Add each person to their size bucket HashMap State: Size 1: 5 Size 3: 0 1 2 3 4 6 3 Check Group Size When bucket reaches target size 4 Form Groups Add to result, clear bucket Split size-3 bucket: [0,1,2] [3,4,6] FINAL RESULT Formed Groups: Group 1 (size 1) 5 Group 2 (size 3) 0 1 2 Group 3 (size 3) 3 4 6 OK - All grouped! [[5],[0,1,2],[3,4,6]] Time: O(n) | Space: O(n) Key Insight: The greedy approach works because we process people one by one, adding them to buckets based on their required group size. When a bucket reaches its target size, we immediately form a group and clear the bucket. This guarantees each person is in exactly one valid group - O(n) time complexity. TutorialsPoint - Group the People Given the Group Size They Belong To | Greedy Approach
Asked in
Google 15 Amazon 12 Microsoft 8 Meta 6
156.0K Views
Medium Frequency
~15 min Avg. Time
2.8K Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen