LeeCode HOT100 - 两数之和

 

 相关定义:

1、哈希表(Hash Table),也称为散列表,是一种根据键(Key)直接访问内存存储位置的数据结构。它通过哈希函数(Hash Function)将键映射到存储桶(Bucket)或槽(Slot)中,以实现快速的数据插入、查找和删除操作。

2、map 不是真正意义上的哈希表(有序),

unordered_map 才是基于哈希表实现的关联容器(无序)。

 map:

1、map<int,int>a; //里面第一个元素是键,第二个元素是其对应的值,根据键的大小排列。

(在这个代码中,将数组的值作为键,下标作为值,因为要求是返回下标)

2、map[键]索引其对应的值。

思路:

通过i遍历数组中的元素nums[i],寻找该元素在map中是否有对应的值=target-nums[i] ,

若没有存入map中,for循环遍历

class Solution {

public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> a;
        //定义了一个 map 类型的变量 a,它的作用是存储数组元素及其对应的下标,以实现哈希查找。
        //map 是一种关联容器,提供一对一的映射关系.
        //特别注意:这里键是数组元素的值,值是元素的下标
        vector<int> b(2,-1);
        //定义了一个大小为 2 的整数向量 b,并将其初始值设为 -1,用于存储最终找到的两个数的下标。
        for(int i=0;i<nums.size();i++)
        {
            if(a.count(target-nums[i])>0)
            // 检查 target - nums[i] 是否存在于 map a 中
            // a.count(key) 函数会返回 map 中键为 key 的元素的数量
            //因为 map 中键是唯一的,所以返回值要么是 0(不存在),要么是 1(存在)
            {
                b[0]=a[target-nums[i]];
                // 如果存在,说明找到了两个数的和等于 target,将a[target-nums[i]]的值赋给b[0].
                // 将 target - nums[i] 对应的下标存入 b[0],在我们定义的map a 中 键是数组元素的值,值是元素的下标
                b[1]=i; // 将当前元素的下标存入 b[1]
                break; // 找到结果后,跳出循环,因为题目只要求找到一组满足条件的解
            }

            // 如果 target - nums[i] 不在 map a 中
            // 将当前元素 nums[i] 及其下标 i 存入 map a 中
            // 这样后续再遍历到其他元素时,如果存在满足条件的组合,就可以通过查找 map 找到对应的下标
            
            a[nums[i]]=i;//反过来放入map中,用来获取结果下标
        }
        return b;
    };
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值