找满足和为target的两数下标,最主要是要能快速根据数找到下标。 可以先建立数与下标的映射map。然后用i遍历数组,根据target与当前数计算出另一个数,然后在map中找,能找到,则很快能得到两数下标。

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        map<int,int> numIndexMap;
        vector<int> ret;
        for (int i = 0; i < (int)numbers.size(); i++)
        {
            numIndexMap[numbers[i]] = i;
        }
        
        for (int i = 0; i < (int)numbers.size(); i++)
        {
            int &num1 = numbers[i];
            int num2 = target - num1;
            if (numIndexMap.find(num2) != numIndexMap.end())
            {
                int j = numIndexMap[num2];
                if (i != j)
                {
                    ret.push_back(min(i + 1, j + 1));
                    ret.push_back(max(i + 1, j + 1));
                    break;
                }
            }
        }

        return ret;
    }
};