两数之和
给定一个整数数组 nums 和一个目标值 target,
请你在该数组中找出和为目标值的那 两个整数
并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。
但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
`
我们用哈希表,查找
题目所求是返回 两个下标,所以再储存的时候:
Key == nums[i] 。 //数组元素
Value == i 。//下标
即:
unordered_map <int,int> hash;
hash[nums[i]]=i
则,显然:
class Solution{
public:
vector<int> twoSum(vector<int> & nums, int target) {
vector<int> ans;
unordered_map <int,int> hash;
for(int i = 0;i<nums.size();++i){
//查找的关键词Key,相当下标
int temp = target - nums[i];
//先查找,有的话结束(Only),没有就再存储
if(hash.find(temp)!=end(hash))
{
ans.push_back(i);
ans.push_back(hash[temp]);
return ans;
}
else
hash[nums[i]]=i; //Key:元素 Value:下标index
}
return ans; //神奇的Leetcode法则
}
};