在本题如果使用map方法的话,需要想清楚几个问题
例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
1.为什么用哈希法?
哈希法的目的是为了查找某一元素是否出现过。本题在遍历数组的时候,例如当遍历到 2 时,我们想知道是否出现过 与 2 的合是target的数字。所以就可以想到哈希法
2.为什么用map?
我们想知道是否出现过 能与当前遍历的数 的合 是 target。返回的时,数,和这个数的下标。这就是一对键值对。用map保存下来。
3.为什么使用unordered_map?
我们不需要其中的元素有序,也不需要让元素多次存在。unordered_map 查询删改效率最高!
4. map 中的key应该设置为 什么?
我们需要寻找的是元素,元素的值!不是元素的下标,所以自然让key存放的是元素的值。
5.map的作用?
就是存放已经出现过的值。
整题的步骤:
遍历数组,每遍历一个元素,就去map里查找是否出现过 可以与该元素相加 合为 target的值。如果有,则返回。如果没有,则将该元素插入。
学习到的:
1.如何定义一个map : unordered_map<int,int> map;
2.如果查询到了,返回的是迭代器,指向该元素。it->second 取下标
3.如何插入一个元素到map中? map.insert(pair<int,int>(nums[i] , i));
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map;
for(int i = 0; i < nums.size(); i++)
{
int s = target - nums[i];
if(map.find(s) != map.end())
{
auto it = map.find(s);
return {it->second, i };
}
else
{
map.insert(pair<int, int>(nums[i], i));
}
}
return {0,0};
}
};