解法:先遍历一遍数组,将数组中的元素和下标存放于一个无序的哈希表中,其中数组中的元素为key,下标为value。
遍历一遍数组,利用 unordered_map的 find函数查找哈希表中是否存在 (target-当前元素的值)。 注意可能出现 target = 2numbers[i]这种情况,所以if条件判断内要 && m[target-numbers[i]] != i。 最后返回符合条件两个下标即可。

#include <unordered_map>
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) 
    {
        unordered_map<int, int> m;
        int n = numbers.size();

        for(int i=0; i<n; i++)
            m[numbers[i]] = i;

        for(int i=0; i<n; i++)
        {
            if(m.find(target-numbers[i]) != m.end() && m[target-numbers[i]] != i)
            {
                return {i+1, m[target-numbers[i]]+1};
            }
        }
        return {};
    }
};