题目名称

有 n 个人被分成数量未知的组。每个人都被标记为一个从 0 到 n - 1 的唯一ID 。

给定一个整数数组 groupSizes ,其中 groupSizes[i] 是第 i 个人所在的组的大小。例如,如果 groupSizes[1] = 3 ,则第 1 个人必须位于大小为 3 的组中。

返回一个组列表,使每个人 i 都在一个大小为 groupSizes[i] 的组中。

每个人应该 恰好只 出现在 一个组 中,并且每个人必须在一个组中。如果有多个答案,返回其中 任何 一个。可以 保证 给定输入 至少有一个 有效的解。

示例

输入:groupSizes = [3,3,3,3,3,1,3]

输出:[[5],[0,1,2],[3,4,6]]

题解

这道题最是简单不过

首先根据组的大小对人员进行分配,将在同一个大小的组的人员集中到一起

然后在对同一个大小组的人员根据每个组所能容纳人员个数进行分配,最后得到分组后的人员

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var groupThePeople = function(groupSizes) {
let index = {}
for(let i = 0; i < groupSizes.length; i++) {
let item = groupSizes[i]
if(!index[item]) index[item] = []
index[item].push(i)
}
let arr = []
Object.keys(index).map(item => {
while(index[item].length) {
arr.push(index[item].splice(0, item))
}
})
return arr
};