输入:数组,整数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);
}