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.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ccc7a74b-84c2-45a4-9888-664995591025/Screen_Shot_2021-04-02_at_4.02.32_PM.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fdb6dc69-c471-4aa5-a7e5-96a87ac9d902/Untitled_Notebook_(1)-30.jpg

"""
1282. Group the People Given the Group Size They Belong To

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: groupSizes = [3,3,3,3,3,1,3]
Output: [[5],[0,1,2],[3,4,6]]
"""

groupSizes = [2,1,3,3,3,2] # 333, 333, 1 -> [[0, 1, 2], [3, 4, 6], [5]]
groups = []
i_g = 0  # which index is it in groups list

while max(groupSizes) != 0:
    i = 0
    groups.append([])  # next group
    
    smallest = 100  # big number
    while i < len(groupSizes):  # find the smallest
        if smallest > groupSizes[i] and groupSizes[i] > 0:
            smallest = groupSizes[i]

        i += 1

    count = 0
    i = 0
    while count != smallest:  # find the exact index and put into the answer list
        if groupSizes[i] == smallest:
            groups[i_g].append(i)
            groupSizes[i] = 0  # replace with 0 to not confused with the smallest number

            count += 1
            
        i += 1
    
    i_g += 1

print(groups)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eb82f94c-d090-4d61-8d72-f96e249a578a/Screen_Shot_2021-04-02_at_4.03.46_PM.png