如果是有序数组,查找两数之和可以从通过定义两个迭代器从两边进行,这样快一点。但是题目没有说明是有序数组,因此只能逐个比较。题目要求结果不能重复,自然想到了map来处理数据,由于用不到map的有序特性,因此为了追求速度选择unordered_map。将已经遍历的结果插入到unordered_map,在下一个数到达时从unordered_map中寻找满足要求的数,如果存在则返回,否则将此数加入unordered_map。因为返回的是数据序号,因此选择unordered_mapd的格式为<数,序号>。
下面是代码处理,用时12ms。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
unordered_map<int,int> unOdMap;
unOdMap.insert(pair<int,int>(nums[0],0));
unordered_map<int,int>::iterator mIter;
for(int i=1;i<nums.size();i++)
{
mIter=unOdMap.find(target-nums[i]); //查找关键字
if(mIter!=unOdMap.end()) //找到了两数之和等于target
{
result.push_back(mIter->second); //添加序号
result.push_back(i);
break;
}
else
{
unOdMap.insert(pair<int,int>(nums[i],i));
}
}
return result;
}
};