Output: index1=1, index2=2
题目翻译:这道题目的意思是给定一个数组和一个值,让求出这个数组中两个值的和等于这个给定值的坐标。输出是有要求的:坐标较小的放在前面,较大的放在后面,这俩坐标不能为零。
这里用hash_map来解决,把每个数都存入map中,任何再逐个遍历,查找是否有 target – nubmers[i]。 时间复杂度 O(n)。
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> ret;
if (nums.size()<=1)
{
return ret;
}
//新建一个map<key,value>,用来存储nums里面的元素和index
map<int,int> myMap;
for (int i=0; i<nums.size(); i++)
{
myMap[nums[i]]=i;
}
for (int i=0; i<nums.size(); i++)
{
int resValue=target-nums[i];
//如果找到resValue
if (myMap.find(resValue)!=myMap.end())
{
int index=myMap[resValue];
if (index>i)
{
ret.push_back(i+1);
ret.push_back(index+1);
return ret;
}
}
}
}原文地址:http://blog.csdn.net/lsh_2013/article/details/45875609