LeetCode 1282. 用户分组

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;
    }

我看到评论区有直接拿数组做的,真的牛~

 

posted @ 2020-05-31 16:20  ZJPang  阅读(199)  评论(0编辑  收藏  举报