难度中等90收藏分享切换为英文接收动态反馈
有 n
个人被分成数量未知的组。每个人都被标记为一个从 0
到 n - 1
的唯一ID 。
给定一个整数数组 groupSizes
,其中 groupSizes[i]
是第 i
个人所在的组的大小。例如,如果 groupSizes[1] = 3
,则第 1
个人必须位于大小为 3
的组中。
返回一个组列表,使每个人 i
都在一个大小为 groupSizes[i]
的组中。
每个人应该 恰好只 出现在 一个组 中,并且每个人必须在一个组中。如果有多个答案,返回其中 任何 一个。可以 保证 给定输入 至少有一个 有效的解。
示例 1:
1 2 3 4 5 6 7
| 输入:groupSizes = 输出: 解释: 第一组是 ,大小为 1,groupSizes = 1。 第二组是 ,大小为 3,groupSizes = groupSizes = groupSizes = 3。 第三组是 ,大小为 3,groupSizes = groupSizes = groupSizes = 3。 其他可能的解决方案有 和 。
|
示例 2:
提示:
groupSizes.length == n
1 <= n <= 500
1 <= groupSizes[i] <= n
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Solution { public List<List<Integer>> groupThePeople(int[] groupSizes) { Map<Integer, Integer> map = new HashMap<>(); List<List<Integer>> ans = new ArrayList<>(); int n = groupSizes.length; for (int i = 0; i < n; i++) { int index = map.getOrDefault(groupSizes[i], 0); if(index != 0 && ans.get(index-1).size() < groupSizes[i]) { ans.get(index-1).add(i); } else { List<Integer> temp = new ArrayList<>(); temp.add(i); ans.add(temp); map.put(groupSizes[i], ans.size()); } } return ans; } }
|