题目:两数之和

最容易想到的方法就是两层for循环,时间复杂度为O(n^2)

但是可以利用哈希表O(1)的查找时间复杂度将其降至 O(n)

具体实现:

在循环中对”表内是否存在等于‘目标值减去当前值’的数进行判断“(因为需要进行配对),如果没有,就将当前的元素加入到哈希表,否则直接输出

注:这里的判断条件——it != um.end() 的意思是找到了匹配的数字,因为如果哈希表没有找到对应的key时,会返回尾地址

 1vector<int> twoSum(vector<int>& nums, int target)
 2{
 3    std::unordered_map<int,int> um;
 4    for(int i = 0; i < nums.size(); i++)
 5    {
 6        auto it = um.find(target - nums[i]);
 7        if(it != um.end()) return {it->second, i};
 8        um[nums[i]] = i;
 9    }
10    return {};
11}