https://leetcode-cn.com/problems/group-the-people-given-the-group-size-they-belong-to/
这个题一开始还没看懂啥意思。。看了我几分钟
说白了就是给一个数组,数组里的数字代表他所在的分组中最多有多少人。
那么我们就很容易解决了,用一个map去记录下来每一个最大存m个人的组里面有哪几个用户即可。如果当前的长度满了,就加入答案中并且换新的链表。
/** * 1282 * @param groupSizes * @return */ public List<List<Integer>> groupThePeople(int[] groupSizes) { //记录每一个分组中有多少个人 HashMap<Integer, List<Integer>> map = new HashMap<>(); //答案 List<List<Integer>> res = new ArrayList<>(); for(int i = 0; i < groupSizes.length; i++){ //使用拉链法解决冲突 List<Integer> list = map.get(groupSizes[i]); //如果是空的,说明这个分组还没有被初始化,这里进行初始化 if(list == null){ list = new ArrayList<>(); map.put(groupSizes[i], list); } //将当前下标放入这个拉链中。 list.add(i); //如果当前拉链长度已经到达了这个分组的最大长度,直接加入答案中,并且重新建一个list用于存放下一次的数据。 if(list.size() == groupSizes[i]){ res.add(list); list = new ArrayList<>(); map.put(groupSizes[i], list); } } return res; }
我看到评论区有直接拿数组做的,真的牛~