【问题标题】:Maps and Vectors -STL in C++地图和向量 - C++ 中的 STL
【发布时间】:2015-11-13 15:31:48
【问题描述】:

任何人都可以解释这段代码的工作原理吗?它是在向量中找到两个元素的索引,这些元素相加以产生给定的目标。我不明白 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;

    }
};

【问题讨论】:

标签: c++ stl


【解决方案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 的索引,因为我们已经刚刚找到,所以我们可以输出两个索引。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多