题目描述
解题思路
遍历原始数组,利用哈希表
,创建分组类别,并且将元素推入符合的分组类别中,若该组满了,则推入结果数组,并且重新在哈希表中创建该分组类别。
若哈希表里面没有符合要求的分组,则创建该类别分组
若填满分组,则将该分组存入res数组并且删除该分组,重新创建
补充
JavaScript Map用法:
Map.set(key,value )
: 可以给哈希表填充一个键值对Map.get( key)
: 返回某个 Map 对象中的一个指定key的元素,也就是说可以获取到某个元素方便进行后续处理。Map.has( key)
: 返回一个 bool 值,用来表明 map 中是否存在指定元素Map.delete( key)
:移除 Map 对象中指定的元素。
AC代码
/**
* @param {number[]} groupSizes
* @return {number[][]}
*/
var groupThePeople = function(groupSizes) {
let res = [];
let group = new Map();
let n = groupSizes.length;
for(let i = 0;i<n;i++){
//若哈希表里面没有符合要求的分组,则创建
if(!group.has(groupSizes[i]))
group.set(groupSizes[i], []);
//给用户分组
group.get(groupSizes[i]).push(i);
//若填满分组,则存入res数组并且删除
if(group.has(groupSizes[i])&&group.get(groupSizes[i]).length==groupSizes[i]){
res.push(group.get(groupSizes[i]));
group.delete(groupSizes[i]);
}
}
return res;
};