给定一个整型数组,再给一个整数,求数组中的哪两个元素相加得这个整数,返回这两个数在数组的索引。
例如
输入:
{2, 7, 10, 14} 9
输出:
1 2
对于此题,最普通的方法就是遍历,但是复杂度为O(n^2),复杂度过高。
下面说一种复杂度为O(n)的算法:
C++代码如下:
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<int> result;
map<int,int> mapping;
for (int i=0; i<numbers.size(); ++i)
{
if (mapping[ target - numbers[i]] > 0)
{
result.push_back(mapping[ target - numbers[i]]);
result.push_back(i+1);
}
else
mapping[ numbers[i] ] = i+1;
}
return result;
}
};
原理是使用了map类实现hash查找。