class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int,int>hashtable; //新建一个哈希表
for(int i = 0; i < nums.size(); ++i)
{
auto it = hashtable.find(target - nums[i]); //在哈希表中寻找是否有当前数据的target对应数
if(it != hashtable.end()) //如果这时候迭代器没有指到最后面,也就是找到了对应数
{
return {it->second, i}; //把当前数和对应数的下标返回
}
hashtable[nums[i]] = i; //把这个数放进哈希表,等别人来匹配它
}
return {}; //全部结束
}
};
1.两种方法,第一种是用两个for循环慢慢往前找。第二种是建哈希表,先扔第一个数进去,如果表里面有这个数的对应数,就返回下标。这样可以做到每两个数之间都匹配一遍
2.两个for和哈希表的做法,有点类似数字电路中的时序换资源和资源换时序。
3.注意迭代器的用法,auto。学习思想