Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.
直接暴力N^2的时间复杂度,肯定不行。
然后我就想到了,用MAP对数组先进行记录,记下他们的标号,
这样看余数在不在MAP里面就OK。时间复杂度为0(N).
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector<int> ans(2);
map<int, int> m;
int len=numbers.size();
for(int i = 0; i < len; i ++)
m[numbers[i]] = i;
for(int i = 0; i < len; i ++)
{
if(m.find(target-numbers[i]) != m.end()&& m[target-numbers[i]]!=i)
//排除[0,0,3,0] 0这种数据
{
ans[0] = m[target-numbers[i]];
ans[1] = i;
return ans;
}
}
}
};