两个数组的交集(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。

总结和意义

交集和差集思路


意义

交集

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

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

(本题完)

相关文章
|
4天前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
55 1
|
4天前
|
存储 缓存 安全
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
55 1
|
4天前
|
存储 C++
【C++模板】模板实现通用的数组
【C++模板】模板实现通用的数组
|
4天前
|
存储 人工智能 C++
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
34 1
|
4天前
|
C++ 索引
C++ 获取数组大小、多维数组操作详解
本文介绍了如何获取数组的大小和使用`sizeof()`运算符。`sizeof()`返回数组所占字节数,而非元素个数。要获取元素个数,需除以单个元素的大小。此外,文章展示了如何使用`sizeof()`遍历数组,包括多维数组。多维数组是数组的数组,可用来表示网格。文中以战舰游戏为例说明了多维数组的应用。最后提到了微信公众号`Let us Coding`以获取更多内容。
22 0
|
4天前
|
存储 C++ 索引
C++数组
C++数组
|
4天前
|
C++
C++语言学习数组和字符串应用案例
【4月更文挑战第8天】该文展示了C++中数组和字符串的应用案例。数组示例定义了一个整数数组并访问、修改其元素,计算了元素之和。字符串示例中,定义了一个字符串并遍历、修改字符,进行了字符串拼接、查找子字符串及替换操作。
12 3
|
4天前
|
存储 缓存 安全
【C/C++ 基础 数组容器比较】深入探究C++容器:数组、vector与array之间的异同
【C/C++ 基础 数组容器比较】深入探究C++容器:数组、vector与array之间的异同
20 0
|
4天前
|
存储 算法 C语言
C++系列十二:指针数组
C++系列十二:指针数组
|
4天前
|
编译器 C++
C++系列四:数组
C++系列四:数组