Skip to content

Latest commit

 

History

History
48 lines (38 loc) · 1.48 KB

File metadata and controls

48 lines (38 loc) · 1.48 KB

1282. Group the People Given the Group Size They Belong To

There are n people whose IDs go from 0 to n - 1 and each person belongs exactly to one group. Given the array groupSizes of length n telling the group size each person belongs to, return the groups there are and the people's IDs each group includes.

You can return any solution in any order and the same applies for IDs. Also, it is guaranteed that there exists at least one solution.

Example 1:

Input: groupSizes = [3,3,3,3,3,1,3]
Output: [[5],[0,1,2],[3,4,6]]
Explanation:
Other possible solutions are [[2,1,6],[5],[0,4,3]] and [[5],[0,6,2],[4,3,1]].

Example 2:

Input: groupSizes = [2,1,3,3,3,2]
Output: [[1],[0,5],[2,3,4]]

Constraints:

  • groupSizes.length == n
  • 1 <= n <= 500
  • 1 <= groupSizes[i] <= n

Solutions (Rust)

1. HashMap

use std::collections::HashMap;

impl Solution {
    pub fn group_the_people(group_sizes: Vec<i32>) -> Vec<Vec<i32>> {
        let mut group_ids = HashMap::new();
        let mut groups = Vec::new();

        for (id, size) in group_sizes.iter().enumerate() {
            let v = group_ids.entry(size).or_insert(Vec::new());
            (*v).push(id as i32);

            if v.len() == *size as usize {
                groups.push(group_ids.remove(size).unwrap());
            }
        }

        groups
    }
}