1. 题目

有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情况(存在的用户组以及每个组中用户的 ID)。

你可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。

示例 1:
输入:groupSizes = [3,3,3,3,3,1,3]
输出:[[5],[0,1,2],[3,4,6]]
解释:
其他可能的解决方案有 [[2,1,6],[5],[0,4,3]] 和 [[5],[0,6,2],[4,3,1]]。示例 2:
输入:groupSizes = [2,1,3,3,3,2]
输出:[[1],[0,5],[2,3,4]]提示:
groupSizes.length == n
1 <= n <= 500
1 <= groupSizes[i] <= n

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-the-people-given-the-group-size-they-belong-to
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. multimap 解题

  • 利用 multimap 的有序性,将 <组的长度,ID> 插入map
  • 依次将短的组push_back进数组,数组长度满了,再开一个新的数组
class Solution {public:vector<vector<int>> groupThePeople(vector<int>& groupSizes) {multimap<int,int> m;for(int i = 0; i < groupSizes.size(); ++i)m.emplace(groupSizes[i],i);vector<vector<int>> ans(1);for(auto& kv : m){if(ans.back().size() < kv.first)ans.back().push_back(kv.second);if(ans.back().size() == kv.first)ans.push_back({});}if(ans.back().size() == 0)ans.pop_back();return ans;}
};


or

桶排序思想,将长度相同的放到一个桶里,桶满了,push进答案,清空桶

class Solution {public:vector<vector<int>> groupThePeople(vector<int>& groupSizes) {vector<vector<int>> temp(500);vector<vector<int>> ans;for(int i = 0; i < groupSizes.size(); ++i){temp[groupSizes[i]].push_back(i);if(temp[groupSizes[i]].size() == groupSizes[i]){ans.push_back(temp[groupSizes[i]]);temp[groupSizes[i]].clear();}}return ans;}
};

LeetCode 1282. 用户分组(桶排序思想)相关推荐

  1. leetcode —— 1282. 用户分组

    有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组.给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情 ...

  2. 【算法】1282. 用户分组(多语言实现)

    文章目录 1282. 用户分组: 样例 1: 样例 2: 提示: 分析 题解 rust go typescript c c++ java python 原题传送门:https://leetcode.c ...

  3. 算法--排序--大小写字母数字分离(桶排序思想)

    题目: 对D,a,F,B,c,A,z这个字符串进行排序,要求将其中所有小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有序.比如经过排序之后为a,c,z,D,F,B,A,这个如何来实现 ...

  4. Java 第 33 课 1282. 用户分组 523. 连续的子数组和

    第 33 课 [1282. 用户分组](https://leetcode-cn.com/problems/group-the-people-given-the-group-size-they-belo ...

  5. 借助桶排序思想完成的一道题

    问题: 数组排序之后的相邻数的最大差值: 嗯,你可以排序,然后找相邻的最大差值. 但是你觉得这么简单我写他干啥. 最优解:时间复杂度O(N),空间O(1) 那我们开始说这种方法: 1)遍历所有数,找到 ...

  6. 函数传参问题,桶排序去重,分治递归,摩尔投票求数组众数,数组中心下标求法

    TIPS 1. 我们都知道,地址,指针这两者是完全等价的概念,但是有微小的差别.地址的话是不能够修改的(比如说数组名++就是违法的),而指针的话可以++与--. 2. 以后一旦在代码里面看到字符cha ...

  7. trie、桶排序、排序总结

    trie.桶排序.排序总结 #前缀树 #桶排序 #计数排序 #基数排序 前缀树 1)单个字符串中,字符从前到后的加到一棵多叉树上 2)字符放在路上,节点上有专属的数据项(常见的是pass和end值) ...

  8. 【排序算法】图解桶排序

    目录 前言 桶排序思想 桶排序算法分析 时间复杂度分析 桶排序适用情况 实现一个桶排序 结语 前言 在数据结构与算法的排序中,我们很多人可能更多的熟悉冒泡排序.快速排序.归并排序.可能对堆排序.桶排序 ...

  9. 算法入门篇四 桶排序

    桶排序 计数排序(基于统计) 要求数据是有限的,和数据状况有关,比如对于200个人统计他们的年龄分布,这个时候需要申请200个桶,因此对于输入数据的规模有限制,如果输入规模是不定的,空间申请就会很麻烦 ...

最新文章

  1. TypeScript 2.0 已发布
  2. python切片语法-Python切片符号(:)用法及示例
  3. 短信怎么控制modbus设备?
  4. 海洋影音盒 V 2.0
  5. Python结合Shell/Hadoop实现MapReduce
  6. 实验四 图像复原及几何校正
  7. JAVA 事务不生效的常见场景和修改方案
  8. 基本分段存储管理方式
  9. java jnlp_使用Java 7启动JNLP时的NoSuchAlgorithmException
  10. 蓝牙无线技术(BLE)介绍与开发点滴总结
  11. Unity3D分离子物体解除父子关系/也可实现对子物体的删除
  12. 【破茧成蝶-用户体验设计】读书笔记
  13. 【迅为推荐】适合新手学习的arm开发板-iTOP-4412开发板
  14. 双离合档把上按钮作用_读者投稿:福特逐渐放弃双离合变速箱背后的秘密
  15. 笔记本电脑的键盘灯如何关
  16. 常见操作String的方法(截取子串,分割字符串,字符串的替换)
  17. 什么是领导?什么是管理?这两者的区别,你一定要搞清楚
  18. Java调用打印机打印(远程、本地皆可用)
  19. Midjourney以图生图功能的使用
  20. 液体粘滞系数matlab,黏滞系数测定实验报告(共10篇).doc

热门文章

  1. C和C++混合编程(__cplusplus使用)
  2. python 内置方法赋值_Python内置数据结构之字符串str
  3. 内核中的竞争状态和互斥(简述)
  4. spring boot 实战
  5. ZJOI2018 Round2 游记
  6. 原来你是这样的Promise
  7. 【Flask模板】include标签
  8. Service Worker,Web Worker,WebSocket的对比
  9. VMWare serve 2.0 进入 RHEL Linux rescue模式
  10. 周报_2012第11周(2012/03/11-2012/03/17)