以矢量作为参数的地图

Map with a vector as a parameter

本文关键字:参数 地图      更新时间:2023-10-16

对于Leetcode:

有 n 个人的 ID 从 0 到 n - 1,每个人正好属于一个组。给定数组组长度 n 的大小告诉每个人所属的组大小,返回有的组和每个组包含的人员 ID。

您可以按任何顺序返回任何解决方案,这同样适用于 ID。此外,可以保证至少存在一个解决方案。

示例 1:

输入:组大小 = [2,1,3,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;
}
}; 

地图是否包含一堆不同的向量,还是只有 1 个向量?

你能解释一下到底在推动什么吗?当你有map<int,vector<int>>;时,你是否将组大小推送为键,然后值是索引?

因此,地图看起来像map[groupsize value, vector of indexes]吗?

输出是如何获得第一个向量[1]的?如果值 2 应该首先推送向量?

地图是否包含一堆不同的向量,还是只有 1 个 向量?

对于映射中的每个键,都存在一个向量作为值。在您的示例中,有 3 个向量:

  • 键 "1", 矢量 ( 1 (
  • 键 "2", 矢量 ( 0, 5 (
  • 键 "3", 矢量 ( 2, 3, 4 (

你能解释一下到底在推动什么吗?当你有map<int,vector<int>>;你是否将组大小作为关键,并且 那么值是索引?

您正在推动什么以及在哪里推动取决于in的当前值。n设置为大小groupSizes,所以 6。i范围为 0 到 5。在第一次迭代中,push_back按以下方式调用:

myMap[groupSizes[0]].push_back(0);
  • groupSizes[0]的值为"2",因为 [2,1,3,3,3,2] 的索引 0 是"2">
  • myMap[groupSizes[0]]在地图中搜索值"2"。如果密钥尚不存在,则将其插入。然后它返回值;如果它尚不存在,则创建它 ->将返回一个空向量。
  • push_back(0)将值"0"添加到值"2"的向量中

因此,地图看起来像map[组大小值,索引向量]吗?

是的,但请注意,组大小值在映射中分组。其中只有值

1、2 和 3,而不是 2、1、3、3、3、3 和 2。

输出是如何获得第一个向量 [1] 的?如果值 2 应为 先被推了矢量?

我认为您的最终输出代码丢失了,但我猜您的输出只是迭代了您的结果向量。如果是这样的话,这个顺序只是一个快乐的巧合。groupSize 值告诉您,向量中将有多少个元素。因此,groupSize 值越低,它就越早完成并推送到结果向量中。所以"1"只包含一个元素,将首先被推入结果向量,如if(myMap[groupSizes[i]].size()==groupSizes[i])