【发布时间】:2020-06-09 06:18:54
【问题描述】:
对于 Leetcode:
有 n 个人,他们的 ID 从 0 到 n - 1,每个人恰好属于一个组。给定长度为 n 的数组 groupSizes 告诉每个人所属的组大小,返回其中的组以及每个组包含的人的 ID。
您可以按任何顺序返回任何解决方案,这同样适用于 ID。此外,保证存在至少一种解决方案。
示例 1:
输入:groupSizes = [2,1,3,3,3,2]
输出:[[1],[0,5],[2,3,4]]
class Solution {
public:
vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
unordered_map<int,vector<int> > myMap;
int n=groupSizes.size();
vector<vector<int>> answer;
for(int i=0;i<n;i++){
myMap[groupSizes[i]].push_back(i); // myMap key/value ; key= group, value=index
cout<<i<<endl;
if(myMap[groupSizes[i]].size()==groupSizes[i]){
cout<<"pushed "<<i<<endl;
answer.push_back(myMap[groupSizes[i]]);
myMap[groupSizes[i]]={};
}
}
return answer;
}
};
地图是否包含一堆不同的向量,还是只有一个向量?
你能解释一下到底是什么被推动了吗?当您有map<int,vector<int>>; 时,您是否将分组大小作为键,然后值是索引?
那么,地图会不会像map[groupsize value, vector of indexes]?
输出是如何得到第一个向量[1]的?如果值 2 应该先推向量?
【问题讨论】:
-
想想
std::unordered_map<int, float>- 这张地图是包含一堆花车还是只有一个? -
if(myMap[groupSizes[i]].size()==groupSizes[i]){: 这段代码似乎只是因为正好有 1 个“1”、2 个“2”和 3 个“3”。
标签: c++ dictionary vector unordered-map