LC1282.用户分组

有 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

 1 class Solution {
 2 public:
 3     vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
 4         unordered_map<int, vector<int>> groups;
 5         vector<vector<int>> res;
 6         for(int i=0;i<size(groupSizes);i++){
 7            groups[groupSizes[i]].push_back(i);
 8         }
 9     
10         for(auto group:groups){
11             if(group.first){
12                 if(group.first<size(group.second)){
13                     vector<int> ans;
14                     for(int i=0;i<size(group.second);i++){
15                         ans.push_back(group.second[i]);
16                         if((i+1)%group.first==0){
17                             res.push_back(ans);
18                             ans.clear();
19                         }
20                     }
21                 }
22                 else
23                     res.push_back(group.second);
24             }
25         }
26         return res;
27     }
28 };

pick 1:

C++ 清除Vector的三种方法:

原文链接:https://blog.csdn.net/sinat_18811413/article/details/104592921

 1     vector <int> vecInt;
 2     for (int i=0;i<50;i++)
 3     {
 4         vecInt.push_back(i);
 5     }
 6     
 7     cout<<"capacity:"<<vecInt.capacity();   //j=64
 8     cout<<"size:"<<vecInt.size();          //i=50           
 9     cout<<endl;
10     
11     //1、使用clear ,清空元素,不回收空间
12     vecInt.clear();
13     cout<<"capacity:"<<vecInt.capacity();      //j=64
14     cout<<"size:"<<vecInt.size();         //i=50
15     cout<<endl;
16     //2、erase循环删除,不回收空间
17     for (int i=0;i<50;i++)
18     {
19         vecInt.push_back(i);
20     }
21     
22     for ( vector <int>::iterator iter=vecInt.begin();iter!=vecInt.end();)
23     {
24         iter=vecInt.erase(iter);
25     }
26     cout<<"capacity:"<<vecInt.capacity();      //j=64
27     cout<<"size:"<<vecInt.size();         //i=50   
28     cout<<endl;
29 
30     //3、使用swap,清除元素并回收内存
31     vector <int>().swap(vecInt);  //清除容器并最小化它的容量,
32     //   vecInt.swap(vector<int>()) ;     另一种写法
33     cout<<"capacity:"<<vecInt.capacity();      //j=0
34     cout<<"size:"<<vecInt.size();         //i=0
35     cout<<endl;
36 }

 pick 2:

可迭代容器 中auto 与iterator的不同使用方式;

 1 #include<iostream>
 2 #include<unordered_map>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main(){
 7     unordered_map<int, vector<int>> res;
 8     for(int i=0;i<20;i++){
 9         res[i%4].push_back(i);//分四组,余数分别为0,1,2,3四个桶
10     }
11     //使用auto遍历
12     for(auto m:res){
13         cout<<m.first<<" "<<m.second.size()<<endl;
14     }
15     //使用迭代器遍历,迭代器相当于指针,*iter去对应迭代器的内容,
16     for(unordered_map<int, vector<int>>::iterator iter=res.begin();iter!=res.end();iter++){
17         cout<<iter->first<<" "<<(iter->second).size()<<endl;
18     }
19     vector<int> ans;
20     for(int i=0;i<5;i++){
21         ans.push_back(i*3);
22     }
23    
24     for(auto m:ans)
25     {
26         cout<<m<<" ";
27     }
28     cout<<endl;
29 
30     for(vector<int>::iterator iter=ans.begin();iter!=ans.end();iter++){
31         cout<<*iter<<" ";
32     }
33     cout<<endl;
34 }

 

输出结果:

 

posted @ 2020-04-30 15:08  打屎也不熬夜  阅读(89)  评论(0编辑  收藏  举报