package com.fishercoder.solutions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 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
 * */
public class _1282 {
    public static class Solution1 {
        public List<List<Integer>> groupThePeople(int[] groupSizes) {
            Map<Integer, List<Integer>> map = new HashMap<>();
            for (int i = 0; i < groupSizes.length; i++) {
                List<Integer> list = map.getOrDefault(groupSizes[i], new ArrayList<>());
                list.add(i);
                map.put(groupSizes[i], list);
            }
            List<List<Integer>> result = new ArrayList<>();
            for (int key : map.keySet()) {
                List<Integer> list = map.get(key);
                int i = 0;
                do {
                    result.add(list.subList(i, i + key));
                    i += key;
                } while (i + key <= list.size());
            }
            return result;
        }
    }
}

@@ -133,840 +133,8 @@
 p;%0A%0A
-/**%0A * 1282. Group the People Given the Group Size They Belong To%0A *%0A * There are n people whose IDs go from 0 to n - 1 and each person belongs exactly to one group.%0A * 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.%0A * You can return any solution in any order and the same applies for IDs.%0A * Also, it is guaranteed that there exists at least one solution.%0A *%0A * Example 1:%0A * Input: groupSizes = %5B3,3,3,3,3,1,3%5D%0A * Output: %5B%5B5%5D,%5B0,1,2%5D,%5B3,4,6%5D%5D%0A * Explanation:%0A * Other possible solutions are %5B%5B2,1,6%5D,%5B5%5D,%5B0,4,3%5D%5D and %5B%5B5%5D,%5B0,6,2%5D,%5B4,3,1%5D%5D.%0A *%0A * Example 2:%0A * Input: groupSizes = %5B2,1,3,3,3,2%5D%0A * Output: %5B%5B1%5D,%5B0,5%5D,%5B2,3,4%5D%5D%0A *%0A * Constraints:%0A * groupSizes.length == n%0A * 1 %3C= n %3C= 500%0A * 1 %3C= groupSizes%5Bi%5D %3C= n%0A * */%0A
 publ

refactor 1282