从数组中找两元素,其和等于给定的数

最直观的方法是两次扫描数组,判断target-array[i]是否存在数组中。这样做的时间复杂度是O(n^2)。

如何保存之前的处理结果?可以使用hash table "target - array[i]是否存在数组中。

vector addsToTarget(vector& numbers,int target)
{
    unordered_map numToIndex;
    vector vi(2);
    for(auto it = numbers.begin(); it != numbers.end(); it++)
    {
        if(numToIndex.count(target - *it))
        {
            vi[0] = numToIndex[target - *it] + 1;
            vi[1] = (int)(it - numbers.begin()) + 1;
            return vi;
        }
        numToIndex[*it] = (int)(it - numbers.begin());
    }
}

 

你可能感兴趣的:(算法,字符串)