一、思路
利用哈希表
二、解题方法
先定义一个名为 counts
的无序映射(unordered map)。unordered_map
是 C++ 标准库中的一个容器,用于实现键值对的映射关系。在这里,counts
是一个从整数类型的键(int
)到整数类型的值(int
)的映射。它用于记录 nums1
向量中每个元素的出现次数。
再定义一个向量result存放最终结果。
然后在nums2中查找是否存在和nums1一样的元素,若存在则存放在result中。最后将 counts
中 num
的计数减少一次,以便反映该元素已经在交集中被使用了一次。通过递减计数,我们可以确保每个元素只被计数一次,避免重复添加到结果中。
三、code
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
//是在代码中定义了一个名为 counts 的无序映射(unordered map)。unordered_map 是 C++ 标准库中的一个容器,用于实现键值对的映射关系。
//这里,counts 是一个从整数类型的键(int)到整数类型的值(int)的映射。它用于记录 nums1 向量中每个元素的出现次数。
//在代码的执行过程中,我们遍历 nums1 向量,对于每个元素 num,将其作为键在 counts 中查找对应的值(即出现次数),并进行更新。如果 num 在 counts 中不存在,会自动创建一个新的键值对,并将值初始化为 0。然后,我们将值加一以表示 num 的出现次数。
//通过使用 unordered_map,我们可以方便地统计元素出现的次数,并在后续的处理中使用这些计数信息来处理交集。
unordered_map<int,int> counts;
vector<int> result;
for(int num:nums1)
{
counts[num]++;
}
for(int num:nums2)
{
if(counts.find(num) != counts.end() && counts[num]>0)//counts.find(num) 表示在 counts 中查找键为 num 的元素。find 函数返回一个迭代器,指向找到的元素位置,如果未找到,则返回迭代器指向 counts 的末尾(即 end())。
//counts.end() 表示 counts 的末尾迭代器。
//因此,counts.find(num) != counts.end() 的判断条件是,如果在 counts 中找到了键为 num 的元素,则返回 true,表示找到了;如果未找到,则返回 false,表示未找到。
//在代码中,这个判断条件用于检查 nums2 中的元素是否在 counts 中出现过。如果返回值为 true,表示找到了相应的键,即 nums2 中的元素在 nums1 中也存在,可以进行交集的处理。
{
result.push_back(num);
counts[num]--;//counts[num] 表达式表示访问键 num 对应的值,然后使用 -- 运算符将其递减。这样做的目的是将 counts 中 num 的计数减少一次,以便反映该元素已经在交集中被使用了一次。
//通过递减计数,我们可以确保每个元素只被计数一次,避免重复添加到结果中。
//注意:在更新计数之前,我们需要先进行条件判断来确保 num 的计数大于零,以避免对不存在的键进行递减操作。因此添加了对 num 的计数的判断条件 counts[num] > 0。这样,只有当 num 在 counts 中存在并且计数大于零时,才将其添加到结果向量中并递减计数。
}
}
return result;
}
};
=========================================================================学到的知识:
①
unordered_map<int, int> counts;
是在代码中定义了一个名为 counts
的无序映射(unordered map)。unordered_map
是 C++ 标准库中的一个容器,用于实现键值对的映射关系。
通过使用 unordered_map
,我们可以方便地统计元素出现的次数,并在后续的处理中使用这些计数信息来处理交集。
②
counts.find(num) != counts.end()
是在代码中进行查找操作的条件判断语句。
counts.find(num)
表示在 counts
中查找键为 num
的元素。find
函数返回一个迭代器,指向找到的元素位置,如果未找到,则返回迭代器指向 counts
的末尾(即 end()
)。
counts.end()
表示 counts
的末尾迭代器。
③
vector<int> result;
是在代码中定义了一个名为 result
的向量(vector)。vector
是 C++ 标准库中的一个容器,用于存储一组具有相同类型的元素。