两个数组的交集(C++实现)

简介: 两个数组的交集(C++实现)


题目

思路

利用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。

总结和意义

交集和差集思路


意义

交集

交集是指两个集合中共有的元素构成的新集合。在实践中,交集可以用于寻找共同的属性、特征或关联项。例如,在数据库中,交集操作可以用于查询满足多个条件的记录。
在数据分析和统计中,交集可以用于比较两个数据集之间的相似性或重叠程度。通过计算交集的大小或比例,可以评估两个数据集的共同部分,并进行进一步的分析和推断。

差集:
差集是指一个集合中去除另一个集合中包含的元素后剩余的元素构成的新集合。在实践中,差集可以用于排除或过滤掉不需要的元素。例如,在数据处理中,可以使用差集操作从一个数据集中排除另一个数据集中的特定元素。
在集合运算和逻辑推理中,差集可以用于确定两个集合之间的差异或不同之处。通过分析差集的内容,可以发现集合之间的独特成员或特殊属性。
总之,交集和差集是对集合中元素关系进行处理和分析的有力工具。它们可以帮助我们寻找共同性、相似性、重叠性以及区别和差异,并在各种实践场景中提供有用的信息和洞见。

(本题完)

相关文章
|
3月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
103 4
|
3月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
4月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
49 4
|
4月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
166 0
|
5月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
42 6
|
5月前
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
48 6
|
5月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
65 5
|
4月前
|
安全 编译器 C语言
C++入门-数组
C++入门-数组
|
5月前
|
vr&ar C++
1695. 删除子数组的最大得分(C++,滑动窗口)
1695. 删除子数组的最大得分(C++,滑动窗口)