任何人都可以解释这段代码的工作吗?它是在向量中找到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;
}
};
答案 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的索引因为我们刚刚找到它,所以我们可以输出两个索引。
代码可以改进,但我认为它有效。