leetcode之两数相加

输入:数组,整数target;输出:从数组中找到两个数,使得这两个数之和为target,并输出这两个数的索引值

看到这个题目,首先想到的一种方法就是暴力遍历,也就是先遍历数组中的每一个元素number[i],然后针对该元素再次遍历数组,

当二次遍历的元素number[j]与number[i]的和为target的时候,即查到了结果。

但是这种方法时间复杂度为O(N*N),太耗时;

方法二,可以采用map的方法,将第一次遍历的元素k及索引值保存到map中,然后再遍历该map,如果map中的某一个元素与k的和为target,则停止遍历,即得到了正确的结果,具体代码如下:

auto GetValidIndex(int numbers[],int iTarger)
{
    std::shared_ptr<map<int,int>> PtrMap = make_shared<map<int,int>>();
    for(int i = 0; i < int(sizeof(numbers)/sizeof(int));++i)
    {
        for(int j = 0; j < PtrMap->size();++j)
        {
            if(iTarger - numbers[i] == PtrMap->at(j))
            {
                return make_pair(i,j);
            }
        }
    PtrMap->insert(make_pair(j,numbers[j]));
    }
    return make_pair(-1,-1);

}

猜你喜欢

转载自blog.csdn.net/songzhaorong/article/details/90927315