相关定义:
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; }; };

3170

被折叠的 条评论
为什么被折叠?



