LeetCode热题——1.两数之和

35 阅读1分钟

题目

给定一个整数数组 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 {};
}

}; `