20.06.08 LeetCode01. 两数之和

引言:

  近日刷LeetCode用到unordered_map容器,由于第一次接触,故学习之并记录。后面附上LeetCode原题与题解

unordered_map:

  unordered_map是C++中的哈希表,可以在任意类型与类型之间做映射。unordered_map内部元素是无序的。它的底层是一个防冗余的哈希表(开链法避免地址冲突)。哈希表的数据存储和查找消耗时间复杂度仅为O(1),其缺点是需要占用比较多的内存。

  具体用法可转博文:https://blog.csdn.net/jingyi130705008/article/details/82633778

LeetCode原题:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

 

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路一:暴力求解(此处省略此种方法)

思路二:

  两数之和为target,当确定其中一个数为nums[i]时,另外一个数也必为target-nums[i]。利用C++的unordered_map容器实例化一个map,将数组的值映射为其下标,遍历数组,如果目标值target-nums[i]的映射存在,证明nums[i]和target-nums[i]的映射同时存在,此时返回target-nums[i]的映射和当前遍历到的下标次数,否则将当前数组值nums[i]与下标i通过map映射。

代码:

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         unordered_map<int,int>map;
 5         for(int i = 0;i<nums.size();i++)
 6         {
 7             if(map.count(target-nums[i])==1)//count()判断map里是否存在该值
 8             return {map[target-nums[i]],i};
 9             map[nums[i]]=i;
10         }
11         return {};
12         
13     }
14 };
posted @ 2020-06-08 21:00  γGama  阅读(150)  评论(0编辑  收藏  举报