两数之和
1. 题目描述
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能重复出现。
你可以按照任意顺序返回答案。
示例
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为nums[0] + nums[1] = 9。
2. 解法
当我们希望 a + b = c a+b=c a+b=c时,反过来就是希望 b = c − a b=c-a b=c−a。从这个角度考虑,我们遍历数组时,得到的是上述的 a a a,我们希望在这个数组内找到另一个加数 b b b。所以我们可以创建一个新的容器存放我们遍历过的 a a a,当我们遍历到 b b b时,可以快速地从新容器内读出 a a a以及元素 a a a在nums内的下标。综合以上,我么可以采取哈希表map,因为它能快速查找某个元素,而且可以存储元素的下标。
具体代码为:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
map<int,int> m;
for(int i = 0; i < nums.size(); ++i)
{
int diff = target - nums[i];
if(!m.count(diff))
{
m.insert(make_pair(nums[i],i));
}
else
{
return vector<int>{m[diff],i};
}
}
return vector<int>{};
}
};