https://leetcode-cn.com/problems/two-sum/description/
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
Example:
Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0,1].
主要思路:
- 使用hashmap存储每个数组元素相应下标<key=array_value, value=array_index>。
- 遍历数组,查找target - current_value是否已存在在hashmap中。存在则返回当前元素和在hashmap查到的元素相应下标,否则将<current_value, current_index>添加到hashmap。
代码实现:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashmap;
for (size_t i = 0; i < nums.size(); ++i) {
int current = nums[i];
if (hashmap.find(target - current) != hashmap.end()) {
vector<int> result;
result.push_back(hashmap[target - current]);
result.push_back(i);
return result;
} else {
hashmap[current] = i;
}
}
return vector<int>();
}
};