• leetcode 1282 用户分组


    题目描述:

      有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情况(存在的用户组以及每个组中用户的 ID)。可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。

    题解:

      个人题解:保存一个$(groupsize,id)$的$vector$,对这个$vector$按照$groupsize$升序排序,优先把$groupsize$小的组凑出来。时间复杂度$O(nlogn)$,空间复杂度$O(n)$,代码如下:

      

    class Solution {
    public:
        vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
            vector<pair<int,int>> tmp;
            int Len = groupSizes.size();
            for(int i=0;i<Len;i++)
            {
                tmp.push_back(make_pair(groupSizes[i],i));
            }
            sort(tmp.begin(),tmp.end());
            vector<vector<int>> ans;
            for(int i=0;i<Len;)
            {
                pair<int,int> now = tmp[i];
                int target = i + now.first-1;
                vector<int> tmp_ans;
                while(i<=target)
                {
                    tmp_ans.push_back(tmp[i].second);
                    i++;
                } 
                ans.push_back(tmp_ans);
            }
            return ans;
        }
    };

      官方题解:构建一个$hashmap$,$hashmap$的$key-val$为$(gsize,users)$,$gsize$表示用户组的大小,$users$表示满足用户组大小为$gsize$的所有用户。由于使用的是$hashmap$时间复杂度为$O(N)$,空间复杂度$O(N)$。ac代码如下:

    class Solution {
    public:
        vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
            unordered_map<int, vector<int>> groups;
            for (int i = 0; i < groupSizes.size(); ++i) {
                groups[groupSizes[i]].push_back(i);
            }
    
            vector<vector<int>> ans;
            for (auto group = groups.begin(); group != groups.end(); ++group) {
                const int& gsize = group->first;
                vector<int>& users = group->second;
                for (auto iter = users.begin(); iter != users.end(); iter = next(iter, gsize)) {
                    vector<int> dummy(iter, next(iter, gsize));
                    ans.push_back(dummy);
                }
            }
            return ans;
        }
    };
  • 相关阅读:
    EF基于方法的查询语法
    &,^,|,的简化计算与理解
    会计中阿拉伯数字变数字繁体大写
    接口对接请求方法
    经验总结之Android framework开发
    android开机过程简单描述
    为什么一个类的全局变量默认以m开头?
    使用DataOutputStream写入int类型数字不能显示
    20151128学习总结
    sky简介
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12848682.html
Copyright © 2020-2023  润新知