1282. 用户分组

LeetCode : 1282. 用户分组

在这里插入图片描述



题目大意为:
有 n 个用户,每个用户分别在数组中以下标 0 ~ n - 1 表示, 然后对 n 个用户进行了分组
给定一个数组 arr , arr[i] 值为该用户所在的分组的人数

arr = [3,3,3,3,3,1,3] >> 表示 0、1、2、3、4、6 位置上的用户分组后所在组的总人数为3 , 5位置上的用户分组后组内的人数为 1


1.非贪心解法
1.1 类似拉链法 >> 数组 + list 列表
1.2 数组来表示人数 1 ~ n 的人数, list 添加组内人数等于该数组下标的 用户
1.3 当 list 人数满的时候进行一次 ans.add(list) >> 并清空,为下个组做准备

时间复杂度 O(n^2)


2.贪心

在这里插入图片描述

然而官方题解好像并没有贪心解法 …


非贪心 AC代码


    public List<List<Integer>> groupThePeople(int[] groupSizes) {
        List<List<Integer>> ans = new ArrayList<>();
        class T{
            List<Integer> list = new ArrayList<>();
        }
        // 记录第几个有几个数
        T[] arr = new T[groupSizes.length];
        for (int i = 0; i < groupSizes.length; i++) {
            arr[i] = new T();
        }
        for (int i = 0; i < groupSizes.length; i++) {
            if(arr[groupSizes[i] - 1].list.size() < groupSizes[i] - 1){
                arr[groupSizes[i] - 1].list.add(i);
            } else {
                arr[groupSizes[i] - 1].list.add(i);
                // 满了, 添加到 ans, 同时清空 list
                ans.add(new ArrayList<>(arr[groupSizes[i] - 1].list));
                arr[groupSizes[i] - 1].list.clear();
            }
        }
        return ans;
    }



在这里插入图片描述






>> 另一种解题思路

哈希表 map 解法

在这里插入图片描述

©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页