推荐一个博客:
一文看懂哈希表并学会使用C++ STL 中的哈希表_哈希表end函数-CSDN博客
哈希做法:
我们将nums[i]记为key,将i记为value。
判断target-nums[i]是否在哈希表中,如果在说明这两个值之和为target,那么返回这两个索引即可。如果不在,就把第i个值记录在哈希表中,并继续遍历。
注意auto的用法,还是非常方便的
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> hashmap;
int len=nums.size();
for(int i=0;i<len;i++){
auto iter=hashmap.find(target-nums[i]);
if(iter!=hashmap.end()){
return {iter->second,i};
}
hashmap[nums[i]]=i;
}
return {};
}
};
引用推荐的博文啦
1.哈希表创建
unordered_map<elemType_1, elemType_2> var_name; //声明一个没有任何元素的哈希表,
//其中elemType_1和elemType_2是模板允许定义的类型,如要定义一个键值对都为Int的哈希表:
unordered_map<int, int> map;
2.查找key是否存在
unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
unordered_map<int, int>::iterator iter;
iter = hmap.find(2); //返回key==2的迭代器,可以通过iter->second访问该key对应的元素
if(iter != hmap.end()) cout << iter->second;
3.根据哈希迭代器查找key和value
unordered_map<int, int>::iterator iter = hmap.begin(); //申请迭代器,并初始化为哈希表的起始位置
cout << iter->first << ":" << iter->second;