力扣hot1--哈希

推荐一个博客:

一文看懂哈希表并学会使用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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值