There are n people whose IDs go from 0 to n - 1 and each person belongs exactly to one group. Given the array groupSizes of length n telling the group size each person belongs to, return the groups there are and the people’s IDs each group includes.
You can return any solution in any order and the same applies for IDs. Also, it is guaranteed that there exists at least one solution.
Example 1:
Input: groupSizes = [3,3,3,3,3,1,3]
Output: [[5],[0,1,2],[3,4,6]]
Explanation:
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 == n
1 <= n <= 500
1 <= groupSizes[i] <= n
answer one
Keep track of people in each group based on the group size. Greedily assign people to the corresponding group.
As soon as the group is filled, add it to the result and reset the list of its members.
public List<List<Integer>> groupThePeople(int[] gz) {
List<List<Integer>> res = new ArrayList();
Map<Integer, List<Integer>> groups = new HashMap<>();
for (int i = 0; i < gz.length; ++i) {
List<Integer> list = groups.computeIfAbsent(gz[i], k -> new ArrayList());
list.add(i);
if (list.size() == gz[i]) {
res.add(list);
groups.put(gz[i], new ArrayList());
}
}
return res;
}
思考:利用hashmap的方法来做。能不能换种方法么?