题目描述
有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情况(存在的用户组以及每个组中用户的 ID)。
你可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。
示例 1:
输入: groupSizes = [3,3,3,3,3,1,3]
输出: [[5],[0,1,2],[3,4,6]]
解释: 其他可能的解决方案有 [[2,1,6],[5],[0,4,3]] 和 [[5],[0,6,2],[4,3,1]]。
示例 2:
输入: groupSizes = [2,1,3,3,3,2]
输出: [[1],[0,5],[2,3,4]]
提示:
groupSizes.length == n1 <= n <= 5001 <= groupSizes[i] <= n
来源:LeetCode
思路
用一个 Map 记录下相同分组大小的成员,人数够了即组成一个分组,记录到结果里。遍历完所有成员的分组大小,就得到了结果。
解法
/**
* @param {number[]} groupSizes
* @return {number[][]}
*/
const groupThePeople = groupSizes => {
const result = [];
const sizeMap = {};
groupSizes.forEach((size, index) => {
if (!sizeMap[size]) {
sizeMap[size] = [];
}
sizeMap[size].push(index);
if (sizeMap[size].length === size) {
result.push(sizeMap[size]);
sizeMap[size] = null;
}
});
return result;
};