地图和矢量-STL in C ++

时间:2015-08-20 06:03:34

标签: c++ stl

任何人都可以解释这段代码的工作吗?它是在向量中找到2个元素的索引,用于生成给定的目标。我不明白STL是如何工作的。

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
    map<int,int>m;
    vector<int>v;
    if(nums.size()==0)
    {
        return v;
    }
    for(int i=0;i<nums.size();i++)
    {
        if(m.find(nums[i])==m.end())
        {
            m[target-nums[i]]=i+1;
        }
        else
        {
            v.push_back(m[nums[i]]);
            v.push_back(i+1);
        }

    }
    return v;

    }
};

1 个答案:

答案 0 :(得分:1)

这很简单。假设向量是{8,4,3,2,5},目标是10.您找到的第一个数字是8,所以现在您知道您正在寻找2(因为8 + 2是10)。因此,您将新目标2和索引8(由于索引为1,因此为1)添加到地图中。下一个数字是4所以现在你正在寻找6,所以6和索引2被添加到地图。现在地图看起来像这样

2 ==> 1
6 ==> 2

最终你会在地图中找到一个目标(在这种情况下我们会找到两个),地图会给我们原始的8个索引,我们知道2的索引因为我们刚刚找到它,所以我们可以输出两个索引。

代码可以改进,但我认为它有效。