题目形容
这是 LeetCode 上的 1282. 用户分组 ,难度为 中等。
Tag : 「哈希表」、「模仿」
有 n
集体被分成数量未知的组。每个人都被标记为一个从 $0$ 到 $n - 1$ 的惟一ID
。
给定一个整数数组 groupSizes
,其中 groupSizes[i]
是第 $i$ 集体所在的组的大小。例如,如果 groupSizes[1] = 3
,则第 $1$ 集体必须位于大小为 $3$ 的组中。
返回一个组列表,使每个人 $i$ 都在一个大小为 groupSizes[i]
的组中。
每个人应该恰好只呈现在 一个组中,并且每个人必须在一个组中。如果有多个答案,返回其中任何一个。能够保障给定输出至多有一个无效的解。
示例 1:
输出:groupSizes = [3,3,3,3,3,1,3]输入:[[5],[0,1,2],[3,4,6]]解释:第一组是 [5],大小为 1,groupSizes[5] = 1。第二组是 [0,1,2],大小为 3,groupSizes[0] = groupSizes[1] = groupSizes[2] = 3。第三组是 [3,4,6],大小为 3,groupSizes[3] = groupSizes[4] = groupSizes[6] = 3。 其余可能的解决方案有 [[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$
哈希表 + 模仿
咱们能够应用「哈希表」将所属组大小雷同的下标放到一起。假如组大小为 $k$ 的元素有 $m$ 个,而后咱们再将这 $m$ 个元素依照 $k$ 个一组进行划分即可。
Java 代码:
class Solution { public List<List<Integer>> groupThePeople(int[] gs) { Map<Integer, List<Integer>> map = new HashMap<>(); for (int i = 0; i < gs.length; i++) { List<Integer> list = map.getOrDefault(gs[i], new ArrayList<>()); list.add(i); map.put(gs[i], list); } List<List<Integer>> ans = new ArrayList<>(); for (int k : map.keySet()) { List<Integer> list = map.get(k), cur = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { cur.add(list.get(i)); if (cur.size() == k) { ans.add(cur); cur = new ArrayList<>(); } } } return ans; }}
Typescript 代码:
function groupThePeople(gs: number[]): number[][] { const map = new Map<number, Array<number>>() for (let i = 0; i < gs.length; i++) { if (!map.has(gs[i])) map.set(gs[i], new Array<number>()) map.get(gs[i]).push(i) } const ans = new Array<Array<number>>() for (let k of map.keys()) { let list = map.get(k), cur = new Array<number>() for (let i = 0; i < list.length; i++) { cur.push(list[i]) if (cur.length == k) { ans.push(cur) cur = new Array<number>() } } } return ans};
- 工夫复杂度:$O(n)$
- 空间复杂度:$O(n)$
最初
这是咱们「刷穿 LeetCode」系列文章的第 No.1282
篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,局部是有锁题,咱们将先把所有不带锁的题目刷完。
在这个系列文章外面,除了解说解题思路以外,还会尽可能给出最为简洁的代码。如果波及通解还会相应的代码模板。
为了不便各位同学可能电脑上进行调试和提交代码,我建设了相干的仓库:https://github.com/SharingSou... 。
在仓库地址里,你能够看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其余优选题解。
更多更全更热门的「口试/面试」相干材料可拜访排版精美的 合集新基地
本文由mdnice多平台公布