• LeetCode.1282. 用户分组


    LeetCode.1282. 用户分组

    难度:medium

     

    首先利用哈希表分类信息,对groupSizes的元素进行分类,将值一样的下表存放在List属性的value里,key为要求的组的大小;然后进行分组存储,list满了就再新建一个进行存储即可。

     Java:

    1. class Solution {
    2. public List> groupThePeople(int[] groupSizes) {
    3. List> list = new ArrayList>();
    4. Map> map = new HashMap>();
    5. for (int i = 0; i < groupSizes.length; i++) {
    6. if (map.containsKey(groupSizes[i])) {
    7. map.get(groupSizes[i]).add(i);
    8. } else {
    9. List temList = new ArrayList<>();
    10. temList.add(i);
    11. map.put(groupSizes[i], temList);
    12. }
    13. }
    14. for (int i: map.keySet()) {
    15. List subList = new ArrayList<>();
    16. for(int j: map.get(i)) {
    17. subList.add(j);
    18. if (subList.size() == i) {
    19. list.add(subList);
    20. subList = new ArrayList<>();
    21. }
    22. }
    23. }
    24. return list;
    25. }
    26. }

    使用getOrDefault方法简化:

    1. class Solution {
    2. public List> groupThePeople(int[] groupSizes) {
    3. List> list = new ArrayList>();
    4. Map> map = new HashMap>();
    5. for (int i = 0; i < groupSizes.length; i++) {
    6. List list2 = map.getOrDefault(groupSizes[i], new ArrayList<>());
    7. list2.add(i);
    8. map.put(groupSizes[i], list2);
    9. }
    10. for (int i: map.keySet()) {
    11. List subList = new ArrayList<>();
    12. for(int j: map.get(i)) {
    13. subList.add(j);
    14. if (subList.size() == i) {
    15. list.add(subList);
    16. subList = new ArrayList<>();
    17. }
    18. }
    19. }
    20. return list;
    21. }
    22. }

    空间复杂度:O(n),哈希表存储了n个元素

    时间复杂度:O(n),每个元素都被访问了一遍

  • 相关阅读:
    小芯片chiplet技术杂谈
    电商风控系统(flink+groovy+flume+kafka+redis+clickhouse+mysql)
    【YOLOv5】
    iOS:何为空指针和野指针
    scrcpy笔记
    在lua中新建内嵌库
    ubuntu(20.04)下截图贴图软件——flameshot(带设快捷键)
    【C++进阶】:C++类型转换
    设计原则总结
    马上就2023年了,Go语言成了吗?
  • 原文地址:https://blog.csdn.net/weixin_45867071/article/details/126302820