# 1282.用户分组

# 题目

有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情况(存在的用户组以及每个组中用户的 ID)。

你可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。

示例1
输入:groupSizes = [3,3,3,3,3,1,3]
输出:[[5],[0,1,2],[3,4,6]]
解释:
其他可能的解决方案有 [[2,1,6],[5],[0,4,3]] 和 [[5],[0,6,2],[4,3,1]]
示例2
输入:groupSizes = [2,1,3,3,3,2]
输出:[[1],[0,5],[2,3,4]]

# 个人题解

首先创建一个obj对象tmp,以用户组人数为key,下标为value传入这个obj

  • 首先遍历用户数组,将用户以所处组人数和置入先前创建的对象中
  • 对这个对象做相应处理后放入最终的结果数组,这里分两种情况,当然我们这里的处理方法可以不考虑这两种情况
    1. 组大小数相同的总人数和刚好就是这个大小值,直接置入结果数组
    2. 组大小数相同的总人数和大于这个大小值,将这个大小的组的用户按组大小置入tmp对象

# 代码

var groupThePeople = function(groupSizes) {
    let res = []
    let tmp ={}
    let n = groupSizes.length
    for(let i=0; i<n; i++){
        if(!tmp[groupSizes[i]]){
            tmp[groupSizes[i]] = []
            tmp[groupSizes[i]].push(i)
        }else {
            tmp[groupSizes[i]].push(i)
        }
    }
    for(let j in tmp){
        // let len = tmp[j].length
        // // 将这个大小的组的用户按组大小置入tmp对象
        // for(let k=0; k<(len/j); k++){
        //     res.push(tmp[j].splice(0,j))
        // }
        if(tmp[j].length == j)
        {
            res.push(tmp[j])
        }else{
            let len = tmp[j].length
            // 将这个大小的组的用户按组大小置入tmp对象
            for(let k=0; k<(len/j); k++){
                res.push(tmp[j].splice(0,j))
            }
        }
    }
    return res
};