【问题标题】:Map with a vector as a parameter [closed]以向量为参数的映射 [关闭]
【发布时间】: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&lt;int,vector&lt;int&gt;&gt;; 时,您是否将分组大小作为键,然后值是索引?

那么,地图会不会像map[groupsize value, vector of indexes]

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

【问题讨论】:

  • 想想std::unordered_map&lt;int, float&gt; - 这张地图是包含一堆花车还是只有一个?
  • if(myMap[groupSizes[i]].size()==groupSizes[i]){: 这段代码似乎只是因为正好有 1 个“1”、2 个“2”和 3 个“3”。

标签: c++ dictionary vector unordered-map


【解决方案1】:

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

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

  • 键“1”,向量(1)
  • 键“2”,向量(0, 5)
  • 键“3”,向量(2、3、4)

你能解释一下到底是什么被推动了吗?当你有 map&lt;int,vector&lt;int&gt;&gt;; 您是否将分组大小作为关键,并且 那么值就是索引?

您推送的内容和位置取决于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[groupsize value, vector of indices]?

是的,但请注意,groupsize 值在地图中分组。其中只有值 1、2 和 3,没有 2、1、3、3、3 和 2。

输出是如何得到它的第一个向量 [1] 的?如果值 2 应该是 被推向量先?

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

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 2016-01-08
    • 2023-03-21
    • 1970-01-01
    • 2019-10-19
    • 2019-08-30
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多