题目
思路
根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。
所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。
如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查找差值。
C++代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
//在map中找差值
auto iter = map.find(target - nums[i]);
if (iter != map.end()) {
//找到即返回两个下标
return {iter->second, i};
}
//没找到将当前的值和下标插入map中
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};