通过万岁!!!
- 题目:给你一个数组arr,然后将每个元素的下标i放在一个大小为arr[i]的数组中。最后返回这个大小为arr[i]的若干数组。这里需要注意,最后返回的数组里面的元素是满的,并且题目可以保证的。
- 思路:我们构建一个map,然后key是arr[i]的值,而value是大小为key也就是大小为arr[i]的数组,并且这个数组可能有多个,所以外面还需要再嵌套一层列表,也就是一个二维链表。最后把map中所有的链表合并进行返回即可。
- 技巧:哈希
java代码
class Solution {
public List<List<Integer>> groupThePeople(int[] groupSizes) {
Map<Integer, List<List<Integer>>> map = new HashMap<>();
for (int i = 0; i < groupSizes.length; i++) {
map.putIfAbsent(groupSizes[i], new ArrayList<List<Integer>>() {{
add(new ArrayList<>());
}});
List<List<Integer>> lists = map.get(groupSizes[i]);
List<Integer> list = lists.get(lists.size() - 1);// 最后一个
if (list.size() < groupSizes[i]) {
list.add(i);
} else {
int finalI = i;
lists.add(new ArrayList<Integer>() {{
add(finalI);
}});
}
}
List<List<Integer>> ans = new ArrayList<>();
for (Map.Entry<Integer, List<List<Integer>>> entries : map.entrySet()) {
ans.addAll(entries.getValue());
}
return ans;
}
}
- 总结:题目比较简单。对于哈希的问题,一定要明确key和value的存储内容。