class Solution{
public:
vector<int> twoSum(vector<int>& nums, int target){
unordered_map<int, int> m;//定义一个哈希表
for(int i=0; i<nums.size(); i++){
m[nums[i]] = i;//将容器中的元素添加到哈希表中,哈希表相当于一个一对多的字典,记录当前数字在容器中的位置
}
for(int i=0; i<nums.size(); i++){
if(m.find(target - nums[i]) != m.end() && m[target - nums[i]] != i)//如果对应当前位置数字的target的另外一半在容器中,并且不是当前数字
{
return{i, m[target-nums[i]]};
}
}
return {};
}
};
了解一点C++的vector知识
vector是C++的一个容器,可以看作一个封装好的数字
常用的方法有:
vector<int> a ; //声明一个int型向量a
vector<int> a(10) ; //声明一个初始大小为10的向量
vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
a.size()
a.begin()
a.end()
了解一点哈希函数的东西
相当于一个字典,储存的是键值对 key-value
hash_map<int, string> myMap;
myMap[key] = value
有key则修改其value
没有key则创建key并插入
储存无序