← Static tasks

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/original
public 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 submit
import 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/original
var 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;
};

Explanation