元素和差的值建立映射关系,如果差值能在元素中找到说明就是加数

注意:差值和元素值相同时,这个元素值不能使用

class Solution {
public:
    int find(vector<pair<int, int>>& m, int f, int a){
    //第三个参数:差值和元素值相同时,这个元素值不能使用
        for(int i=0; i<m.size(); ++i){
            if(i!=a && m[i].first == f)
                return i;
        }
        return -1;
    }
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        vector<int> res;
        //建立元素和与target差值映射
        vector<pair<int, int>> m;
        for(int i=0; i<numbers.size(); ++i)
            m.push_back(make_pair(numbers[i], target-numbers[i]));

        //若差值能在元素值中找到说明就是其中一个加数
        for(int i=0; i<m.size(); ++i){
            if(find(m, m[i].second, i)!=-1)
                res.push_back(i+1);
        }
        return res;
    }
};