有 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 == n
1 <= n <= 500
1 <= groupSizes[i] <= n
**难度**: Medium
**标签**: 贪心算法、
# -*- coding: utf-8 -*-
# @Author : LG
"""
执行用时:40 ms, 在所有 Python3 提交中击败了95.78% 的用户
内存消耗:13.6 MB, 在所有 Python3 提交中击败了7.85% 的用户
解题思路:
具体实现见代码注释
"""
class Solution:
def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]:
result = []
dp = [[] for _ in range(len(groupSizes)+1)] # 每种用户组的用户列表
for i, group in enumerate(groupSizes):
dp[group] += [i] # 将用户下标存入对应的用户组
if len(dp[group]) == group: # 如果当前用户组的用户数等于指定数
result.append(dp[group][:]) # 添加到最终结果
dp[group] = [] # 重置对应的用户组
return result