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

题目大意:有n个人,编号0到n-1,每个人只属于一个组,给定一个长度为n的数组gs,gs[i]表示编号为i的人所在组的人数,返回任意一个可能的分组。题目保证存在至少一种分组。

思路:每个人可以独立成组,也可以所有人都在一个组,所以可能的组的人数为1-n,我们把 组的人数相同 的人的编号放在同一个组group,最后根据组的人数进行分割分别成组(或者每当这个组达到上限,就把组内所有人放在最终的组,把当前组清空)

c++:

 class Solution {
public:
vector<vector<int>> groupThePeople(vector<int>& gs) {
// vector<vector<int>> res;
// //unordered_map<int, vector<int>> G;
// vector<vector<int>> G(gs.size() + 1);
// for (int i = 0; i < gs.size(); ++i) {
// G[gs[i]].push_back(i);
// if (G[gs[i]].size() == gs[i]) {
// res.push_back(G[gs[i]]);
// G[gs[i]].clear();
// }
// }
// return res;
vector<vector<int>> res;
unordered_map<int,vector<int>> mp;
for (int i = ; i < gs.size(); ++i) {
mp[gs[i]].push_back(i);
}
for (auto x : mp) {
int i = x.first; //i表示组的人数
vector<int> v = x.second; //可以放在同一个组的所有人的编号
vector<int> t(i); //每i个人放一个组
for (int j = ; j < v.size(); ++j) {
t[j % i] = v[j];
if ((j + ) % i == ) {
res.push_back(t);
}
}
}
return res;
}
};

python3:

 class Solution:
def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]:
count = collections.defaultdict(list)
for i, size in enumerate(groupSizes):
count[size].append(i)
return [v[i:i+size] for size, v in count.items() for i in range(, len(v), size)]

leetcode 1282. Group the People Given the Group Size They Belong To的更多相关文章

  1. 【leetcode】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. ...

  2. LeetCode 49. 字母异位词分组(Group Anagrams)

    题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "ta ...

  3. sql的 group by 分组;linq的 group by 分组

    先来看看 linq的,下面的一段linq 是 ,在 学生导入数据的时候,我们根据学生的手机号码和学生名称进行分组,如果有重复的,我们就筛选出来,用到了 linq的 group by,注意这里是new出 ...

  4. mysql 数据操作 单表查询 group by 聚合函数 没有group by情况下

    聚合函数只能用在组里使用 #没有group by 则默认算作一组 取出所有员工的最高工资 mysql> select max(salary) from employee; +---------- ...

  5. 1.(group by)如何让group by分组后,每组中的所有数据都显示出来

    问题描述:表如下,如何让这个表按device_id这个字段分组,且组中的每条数据都查寻出来?(假如说这个表名为:devicedata) 错误答案:select * from devicedata GR ...

  6. [LeetCode] Search in a Sorted Array of Unknown Size 在未知大小的有序数组中搜索

    Given an integer array sorted in ascending order, write a function to search target in nums.  If tar ...

  7. [ext4]03 磁盘布局 – Flexible group分析

    Flexible Block Groups (flex_bg),我称之为"弹性块组",是EXT4文件系统引入的一个feature. 所谓Flexible Block Groups, ...

  8. Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页

    GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group ...

  9. MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)

    聚合运算之group 语法: db.collection.group( { key:{key1:1,key2:1}, cond:{}, reduce: function(curr,result) { ...

随机推荐

  1. 当 springboot 部署war包,tomcat报一堆无法解决的问题时

    直接打包 jar即可,这样就可以解决这些问题了.

  2. Location of Docker images in all Operating Systems (Linux, Windows, Redhat, Mac OS X)

    原文:http://www.scmgalaxy.com/tutorials/location-of-dockers-images-in-all-operating-systems/ Location ...

  3. LeetCode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)

    题目描述 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9 ...

  4. Python轻量级开发工具Genay使用

    Genay是一个轻量级的免费,开放源代码的开发工具,支持很多的文件类型,并且支持很多的插件,启动快速.安装包只有十几兆,相关的插件也不大,相比pycharm专业版需要收费,并且社区版的安装包大小有两百 ...

  5. leetcode131分割回文串

    class Solution { public: vector<vector<string>> ans; bool isok(string s){ ; ; while(i< ...

  6. LC 302. Smallest Rectangle Enclosing Black Pixels【lock, hard】

    An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. The black ...

  7. python - 注释说明

    归类三种注释风格: 大段的自定义块状注释 """ #========================================= # FileName: upgra ...

  8. 数据库开源框架之sqlcipher加密数据库

    访问github链接:https://github.com/sqlcipher/android-database-sqlcipher 访问 http://sqlcipher.net/sqlcipher ...

  9. 转:extjs 添加loading状态的三种解决办法:

    extjs 添加loading状态的三种解决办法: 方法一: //materialGrid 指需要显示loading状态的控件id var o=Ext.getCmp('materialGrid'); ...

  10. Very important notes about Spring @Transnational(Srping事务注解 @Transnational重要注意事项)

    Sprint @Transnational is being ignored in the following cases: 1. when the caller method is calling ...