LeetCode 两数之和

1.两数之和

LeetCode传送门

题解

#include <vector>
#include <map>
class Solution {
public:
    std::vector<int>
        twoSum(std::vector<int> & nums, int target)
        {
            std::vector<int> result;
            std::map<int,int> map;
            for(int i=0;i<nums.size();i++)
            {
                if(map.count(target - nums[i]) > 0)
                {
                    result.push_back(map[target - nums[i]]);
                    result.push_back(i);
                    return result;
                }
                map[nums[i]] = i;
            }
            return result;
        }
};

解题思路:

  • 首先需要创建一个map哈希表
  • 然后利用map的count函数去匹配哈希表中存储的所有的key,如果匹配不到对应的key就存储一下
  • 如果匹配到了key,就说明已经成功找出了两个相加等于target的数字了

举例

数组:nums = [8,2,7,9,10]
参数:target=9
输出:[1,2]

当for里的i=0的时候,此时执行9-8=1,但是我们的map还是个空哈希表,count肯定不会生效,就会把nums[i]放map里,而map数据如下

Key Value
8 0

当for里的i=1的时候,此时会执行9-2=7,很明显nums下是有7的,但是我们是通过map的key去查找的,很显然,count依然不会生效,所以还是会进行存储操作,此时map数据如下

Key Value
8 0
2 1

当for里的i=2的时候,此时会执行9-7=2,执行到这里的时候,可以看到map内是有2这个key的。所以此时count会i命中判断。
然后我们取出2对应的V=1,在拿到当前循环的i,就可以正确的得到两个索引值,然后输出即可