1282. Group the People Given the Group Size They Belong To
leetcode medium
#array#csharp#hash-table#leetcode#medium
Task
Есть n человек, которые разделены на неизвестное количество групп. Каждый человек имеет уникальный ID от 0 до n - 1.
Вам дан целочисленный массив groupSizes, где groupSizes[i] - это размер группы, в которой находится человек i. Например, если groupSizes[1] = 3, то человек 1 должен быть в группе размером 3.
Верните список групп таким образом, чтобы каждый человек i находился в группе размером groupSizes[i].
C# solution
matched/originalpublic class Solution {
public IList<IList<int>> GroupThePeople(int[] groupSizes) {
var ans = new List<IList<int>>();
var szToGroup = new Dictionary<int, List<int>>();
for (int i = 0; i < groupSizes.Length; i++) {
int size = groupSizes[i];
if (!szToGroup.ContainsKey(size)) {
szToGroup[size] = new List<int>();
}
szToGroup[size].Add(i);
if (szToGroup[size].Count == size) {
ans.Add(new List<int>(szToGroup[size]));
szToGroup[size].Clear();
}
}
return ans;
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public IList<vector<int>> GroupThePeople(vector<int>& groupSizes) {
var ans = new List<vector<int>>();
var szToGroup = new unordered_map<int, List<int>>();
for (int i = 0; i < groupSizes.size(); i++) {
int size = groupSizes[i];
if (!szToGroup.count(size)) {
szToGroup[size] = new List<int>();
}
szToGroup[size].push_back(i);
if (szToGroup[size].size() == size) {
ans.push_back(new List<int>(szToGroup[size]));
szToGroup[size].Clear();
}
}
return ans;
}
}Java solution
auto-draft, review before submitimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public List<IList<int>> GroupThePeople(int[] groupSizes) {
var ans = new List<List<int>>();
var szToGroup = new HashMap<int, List<int>>();
for (int i = 0; i < groupSizes.length; i++) {
int size = groupSizes[i];
if (!szToGroup.containsKey(size)) {
szToGroup[size] = new List<int>();
}
szToGroup[size].add(i);
if (szToGroup[size].size() == size) {
ans.add(new List<int>(szToGroup[size]));
szToGroup[size].Clear();
}
}
return ans;
}
}JavaScript solution
matched/originalvar groupThePeople = function(groupSizes) {
let ans = [];
let szToGroup = new Map();
for (let i = 0; i < groupSizes.length; i++) {
let size = groupSizes[i];
if (!szToGroup.has(size)) {
szToGroup.set(size, []);
}
szToGroup.get(size).push(i);
if (szToGroup.get(size).length === size) {
ans.push(szToGroup.get(size));
szToGroup.set(size, []);
}
}
return ans;
};