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 }
输出结果: