题目
思路
利用set容器的特性对输入的两个整数向量进行排序和去重操作,然后使用两个迭代器在有序的两个set容器中进行遍历,找出两个向量的交集,并将交集元素存储在结果向量中返回。
代码
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //排序加去重 set<int> s1(nums1.begin(),nums1.end()); set<int> s2(nums2.begin(),nums2.end()); vector<int> v; auto it1=s1.begin(); auto it2=s2.begin(); while(it1!= s1.end() && it2!=s2.end()) { if(*it1==*it2) { v.push_back(*it1); it1++; it2++; } else if(*it1>*it2) { it2++; } else { it1++; } } return v; }
代码讲解
set<int> s1(nums1.begin(),nums1.end())
创建了一个整数类型的set容器s1,并使用nums1向量中的元素初始化s1。set容器会自动对元素进行排序,并且只会存储唯一的元素,去除重复项。因此,这行代码实现了对nums1向量的排序和去重操作。
set<int> s2(nums2.begin(),nums2.end())
创建了另一个整数类型的set容器s2,并使用nums2向量中的元素初始化s2。同样地,这行代码实现了对nums2向量的排序和去重操作。
vector<int> v
定义了一个整数向量v,用于存储交集结果。
auto it1=s1.begin()和auto it2=s2.begin()
创建了两个迭代器it1和it2,分别指向s1和s2容器的起始位置。
while(it1!= s1.end() && it2!=s2.end())
在it1没有到达s1容器的末尾,并且it2没有到达s2容器的末尾的条件下,执行循环。
- if(*it1==*it2):如果it1指向的元素等于it2指向的元素,表示找到了一个交集元素。
- v.push_back(*it1):将交集元素添加到结果向量v中。
it1++和it2++:将两个迭代器分别向后移动一位,继续寻找下一个交集元素。 - else if(*it1>*it2):如果it1指向的元素大于it2指向的元素,表示it2指向的元素在s1容器中没有匹配项,需要将it2向后移动一位。
- else:如果it1指向的元素小于it2指向的元素,表示it1指向的元素在s2容器中没有匹配项,需要将it1向后移动一位。
循环结束后,返回存储了交集结果的向量v。
总结和意义
交集和差集思路
意义
交集:
交集是指两个集合中共有的元素构成的新集合。在实践中,交集可以用于寻找共同的属性、特征或关联项。例如,在数据库中,交集操作可以用于查询满足多个条件的记录。
在数据分析和统计中,交集可以用于比较两个数据集之间的相似性或重叠程度。通过计算交集的大小或比例,可以评估两个数据集的共同部分,并进行进一步的分析和推断。差集:
差集是指一个集合中去除另一个集合中包含的元素后剩余的元素构成的新集合。在实践中,差集可以用于排除或过滤掉不需要的元素。例如,在数据处理中,可以使用差集操作从一个数据集中排除另一个数据集中的特定元素。
在集合运算和逻辑推理中,差集可以用于确定两个集合之间的差异或不同之处。通过分析差集的内容,可以发现集合之间的独特成员或特殊属性。
总之,交集和差集是对集合中元素关系进行处理和分析的有力工具。它们可以帮助我们寻找共同性、相似性、重叠性以及区别和差异,并在各种实践场景中提供有用的信息和洞见。
(本题完)