Leetcode 1282. 用户分组

有 n 位用户参加活动,他们的 ID 从 0n - 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