leetcode用户分组

传送门

题目大致意思是:
给出一个整型数组 groupSizes ,groupSizes[i] 是第 i 个人所在的组的大小。
这个数组也就是存的每个人所在的组的大小。

要求返回一个列表,包含所有组,使得每个人 (i) 都在对应于 groupSizes[i] 的大小的组里面

每个人应该 恰好只 出现在 一个组 中,并且每个人必须在一个组中。如果有多个答案,返回其中 任何 一个。可以 保证 给定输入 至少有一个 有效的解。

输入:groupSizes = [3,3,3,3,3,1,3]
输出:[[5],[0,1,2],[3,4,6]]

输入:groupSizes = [2,1,3,3,3,2]
输出:[[1],[0,5],[2,3,4]]

class Solution {
    public List<List<Integer>> groupThePeople(int[] groupSizes) {
        List[] list = new ArrayList[505];
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        for(int i=0;i<505;i++){
        	// list[i] 代表 大小为i的组中的人
            list[i] = new ArrayList<Integer>();
        }
        for(int i=0; i<groupSizes.length; i++){
            list[groupSizes[i]].add(i); // i 加入大小为 groupSizes[i] 的组
            // 如果大小为 groupSizes[i] 的组中人数 已经 达到了组大小,就拆出来,得到了一个组
            if(list[groupSizes[i]].size() == groupSizes[i]){
            	// 注意:这里必须 new 一下进行深拷贝,否则在下面 clear 的时候会连带的把result中也clear了。
                result.add(new ArrayList<>(list[groupSizes[i]]));
                list[groupSizes[i]].clear();
            }
        }
        return result;
    }
}

知识点1:

在定义嵌套ArrayList时,以这种形式创建,new 后面一个ArrayList 一个 List。

List<List<Integer>> result = new ArrayList<List<Integer>>();

知识点2:

在使用嵌套ArrayList时,添加ArrayList对象的时候注意new 一下成深拷贝,否则就是浅拷贝!原ArrayList对象做的操作也会连带的影响自身!

result.add(new ArrayList<>(list[groupSizes[i]]));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henulmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值