1282. 用户分组 : 简单哈希表模拟题

网友投稿 289 2022-08-23

1282. 用户分组 : 简单哈希表模拟题

题目描述

这是 LeetCode 上的 ​​1282. 用户分组​​ ,难度为 中等。

Tag : 「哈希表」、「模拟」

每个人应该恰好只出现在 一个组中,并且每个人必须在一个组中。如果有多个答案,返回其中任何一个。可以保证给定输入至少有一个有效的解。

示例 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]]

提示:

哈希表 + 模拟

Java 代码:

class Solution { public List> groupThePeople(int[] gs) { Map> map = new HashMap<>(); for (int i = 0; i < gs.length; i++) { List list = map.getOrDefault(gs[i], new ArrayList<>()); list.add(i); map.put(gs[i], list); } List> ans = new ArrayList<>(); for (int k : map.keySet()) { List 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

Typescript 代码:

function groupThePeople(gs: number[]): number[][] { const map = new Map>() for (let i = 0; i < gs.length; i++) { if (!map.has(gs[i])) map.set(gs[i], new Array()) map.get(gs[i]).push(i) } const ans = new Array>() for (let k of map.keys()) { let list = map.get(k), cur = new Array() for (let i = 0; i < list.length; i++) { cur.push(list[i]) if (cur.length == k) { ans.push(cur) cur = new Array() } } } return

最后

这是我们「刷穿 LeetCode」系列文章的第 ​​No.1282​​ 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:​​github.com/SharingSour…​​ 。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:640. 求解方程 : 简单模拟题
下一篇:深入理解Aarch64内存管理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~