HDU 1323 Perfection(公因子)
744
2022-08-23
[leetcode] 1282. group the People Given the Group Size They Belong To
Description
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.
Example 1:
Input: groupSizes = [3,3,3,3,3,1,3]Output: [[5],[0,1,2],[3,4,6]]Explanation: The first group is [5]. The size is 1, and groupSizes[5] = 1.The second group is [0,1,2]. The size is 3, and groupSizes[0] = groupSizes[1] = groupSizes[2] = 3.The third group is [3,4,6]. The size is 3, and groupSizes[3] = groupSizes[4] = groupSizes[6] = 3.Other possible solutions are [[2,1,6],[5],[0,4,3]] and [[5],[0,6,2],[4,3,1]].
Example 2:
Input: groupSizes = [2,1,3,3,3,2]Output: [[1],[0,5],[2,3,4]]
Constraints:
groupSizes.length == n1 <= n <= 5001 <= groupSizes[i] <= n
分析
题目的意思是:现在n个人分成若干组,每个人用唯一的ID来标识,groupSize表示的是对每个人分组的限制,比如groupSizes[1]=3表示第一个人必须存在大小为3的组,现在返回每个person所在的组,返回一种答案即可。
我参考了一下答案,可以用字典解决,字典中的键值对为 (gsize, users),其中 gsize 表示用户组的大小,users 表示满足用户组大小为 gsize。所有用户组大小相同的用户都暂时放在了同一个组中。然后将字典中的每个键值对 (gsize, users) 中的 users 进行细分组,添加到结果集合res中。
代码
class Solution: def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]: d=collections.defaultdict(list) for i,_id in enumerate(groupSizes): d[_id].append(i) res=[] for gSize,users in d.items(): for i in range(0,len(users),gSize): res.append(users[i:i+gSize]) return res
参考文献
用户分组
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~