题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
解答
这题主要是使用哈希来降低时间复杂度。时间复杂度主要在于,找到x对应的target - x需要遍历整个列表。哈希的思路是,边遍历x边建立哈希表,如果之前插入哈希表的数是target - x,则返回,否则将x插入表中,继续遍历。 也就是排在列表后面的数当x,前面的数当target-x。这样做的好处是,可以不用把所有的数都插入哈希表中。
代码
` #include <unordered_map>
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> HashMap;
for(int i = 0; i < nums.size(); i++){
auto it = HashMap.find(target - nums[i]);
if(it != HashMap.end()){
return {it->second, i};
}
HashMap[nums[i]] = i;
}
return {};
}
}; `