C++程序从两个数组中查找公共元素

c++程序从两个数组中查找公共元素

使用数组和数据结构可以在多个内存位置上存储同质(相同)数据。使用数组的主要优点是我们可以通过使用索引参数从任何地方访问它们。数据必须按顺序添加和删除的事实将这种数据结构转化为线性结构。要从数组中检索元素,我们只需要使用方括号内的索引或位置号码。在本文中,我们将使用C++获取两个数组中仅存在的共同元素。

理解概念并以示例说明

Given first array A = [10, 14, 65, 85, 96, 12, 35, 74, 69]Given second array B = [23, 65, 89, 96, 12, 37, 71, 69]The common elements in arrays A and B are [65, 96, 12, 69]

在第一个数组中,有九个元素,在第二个数组中,有八个元素。所以这两个数组的大小可能不相同。我们的任务是找出这两个数组之间的共同元素。在这里,我们将看到一些解决这个问题的技巧。

天真的解决方案

第一种也是最常见的解决方案是通过循环遍历第一个数组的每个元素,并对于第一个数组的每个条目在第二个数组中进行搜索。这种解决方案效率不高,但是更简单。让我们看一下算法和相应的实现。

算法

将两个数组A和B作为输入

立即学习“C++免费学习笔记(深入)”;

定义另一个数组 D 来保存所有重复的元素

对于A中的每个元素e1,执行以下操作

对于B中的每个元素e2,执行以下操作

如果 e1 = e2,则

将 e1 插入到 D 中

结束如果

结束循环

结束循环

返回 D

Example

的中文翻译为:

示例

#include # define Z 50using namespace std;void displayArr(int arr[], int n){   for( int i = 0; i < n; i++ ){      cout << arr[ i ] << ", ";   }   cout << endl;}void findCommonElement( int A[], int n, int B[], int m, int D[], int &k ) {   k = 0;   for( int i = 0; i < n; i++ ) {      for( int j = 0; j < m; j++ ) {         if( A[ i ] == B[ j ] ) {            D[ k ] = A[ i ];            k = k + 1;         }      }   }}int main() {   int A[ Z ] = { 10, 14, 65, 85, 96, 12, 35, 74, 69 };   int n = 9;      int B[ Z ] = { 23, 65, 89, 96, 12, 37, 71, 69 };   int m = 8;      int D[ Z ];   int k = 0;      cout << "Given first array A: ";   displayArr( A, n );      cout << "Given second array B: ";   displayArr( B, m );      findCommonElement( A, n, B, m, D, k );   cout << "The common elements are: ";   displayArr( D, k ); }

输出

Given first array A: 10, 14, 65, 85, 96, 12, 35, 74, 69, Given second array B: 23, 65, 89, 96, 12, 37, 71, 69, The common elements are: 65, 96, 12, 69,

使用向量和set_intersection()函数

使用C++ STL,set_intersection()函数返回公共元素作为迭代器对象。但是要使用此函数,我们必须将数组按升序排序。让我们来看看算法和C++实现代码。

算法

将两个数组A和B作为输入

立即学习“C++免费学习笔记(深入)”;

定义另一个数组 D 来保存所有重复的元素

为重复元素数组创建一个迭代器

使用 set_intersection() 方法将 A 和 B 数组进行交集运算,并将结果存储在 D 数组中

返回 D

Example

的中文翻译为:

示例

#include #include #include # define Z 50using namespace std;void displayArr( vector v ){   for( int i = 0; i < v.size() ; i++ ){      cout << v[ i ] << ", ";   }   cout << endl;}vector findCommonElement( vector A, vector B ) {   sort( A.begin(), A.end() );   sort( B.begin(), B.end() );   vector duplicates;      vector D( A.size() + B.size() );   vector::iterator Dit, st;     Dit = set_intersection( A.begin(), A.end(), B.begin(), B.end(), D.begin() );      for( st = D.begin(); st != Dit; ++st )      duplicates.push_back( *st ) ;   return duplicates;}int main() {   vector A = { 10, 14, 65, 85, 96, 12, 35, 74, 69 };    vector B = { 23, 65, 89, 96, 12, 37, 71, 69 };    vector D;      cout << "Given first array A: ";   displayArr( A );      cout << "Given second array B: ";   displayArr( B );      D = findCommonElement( A, B );   cout << "The common elements are: ";   displayArr( D ); }

输出

Given first array A: 10, 14, 65, 85, 96, 12, 35, 74, 69, Given second array B: 23, 65, 89, 96, 12, 37, 71, 69, The common elements are: 12, 65, 69, 96,

结论

在本文中,我们看到了两种从元素集合或两个数组中找到公共元素的方法。第一种朴素的解决方案是使用两个静态数组,通过逐个扫描每个元素来找到公共元素。这种解决方案的时间复杂度为O(n.m),其中n是第一个数组的大小,m是第二个数组的大小。下一种方法使用了基于C++ STL的set_intersection()方法。在这种方法中,我们需要使用排序后的向量。然后,该方法返回一个公共元素迭代器对象。我们可以从中创建一个向量并返回它。

以上就是C++程序从两个数组中查找公共元素的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:53:20
下一篇 2025年12月10日 18:53:03

相关推荐

  • 递归解码一个以计数后跟子字符串编码的字符串

    在这个问题中,我们需要通过重复添加总计数次数来解码给定的字符串。 我们可以采用三种不同的方法来解决问题,并且可以使用两个堆栈或一个堆栈来解决问题。另外,我们可以在不使用两个堆栈的情况下解决问题。 问题陈述 – 我们给出了一个字符串 str ,其中包含左括号和右括号、字母和数字字符。我们需…

    2025年12月17日
    000
  • 计算将字符串分割为以偶数开头且最小长度为M的K个子字符串的方法数

    在这个问题中,我们将计算将给定的字符串划分为K个子字符串的方法,使其满足问题陈述中给出的条件。 我们将使用递归来解决这个问题。此外,我们还将使用表格动态规划方法来高效解决这个问题。 问题陈述 − 我们有一个名为bin_Str的特定长度的字符串。该字符串只包含从’0’到&#82…

    2025年12月17日
    000
  • 将字符重新排列以形成回文(如果可能)在C++中

    我们被给定一个长度为任意给定长度的字符串’str’。任务是重新排列字符,使输出成为一个回文字符串,而不添加或删除给定输入字符串中的字符。回文字符串是指字符以一种方式排列,使得它们从开始到结束发音相同。 让我们看看这个的各种输入输出场景 – 输入 – 字…

    2025年12月17日
    000
  • C++程序查找法向量和迹

    二维数组或矩阵在多个应用中非常有用。矩阵有行和列,并在其中存储数字。在C++中,我们也可以使用多维数组来定义二维矩阵。在本文中,我们将看到如何使用C++计算给定矩阵的范数和迹。 法线是矩阵中所有元素总和的平方根。迹是主对角线中存在的元素的总和。让我们看看算法和 C++ 代码表示。 矩阵法线 $beg…

    2025年12月17日
    000
  • C++程序:将一个数组的所有元素复制到另一个数组中

    数组数据结构用于在连续的内存中存储同质数据位置以顺序方式访问它们。数组是线性数据结构,因此数组的基本操作可以在线性时间内执行。在本文中,我们将了解如何在 C++ 中将一个数组中的元素复制到另一个新数组。 由于数组元素是同类的,因此新数组将具有相同的类型。创建后另一个相同大小的数组,我们只需将第一个数…

    2025年12月17日
    000
  • 重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i]

    = arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j 我们得到一个包含奇数和偶数整数值的整数数组。任务是重新排列数组,使 arr[i] 大于或等于 arr[j],条件是索引 arr[i] 处的值应该为偶数,并且如果 arr[i] 处的值是奇数,那么 arr[i] 应该…

    2025年12月17日
    000
  • 在C和C++中,逗号(comma)的用法是用来分隔表达式或语句

    在 C 或 C++ 中,逗号“,”有不同的用途。在这里我们将了解如何使用它们。 逗号作为运算符。 逗号运算符是一个二元运算符,它计算第一个操作数,然后丢弃结果,然后计算第二个操作数并返回值。逗号运算符在 C 或 C++ 中的优先级最低。 示例 #includeint main() { int x =…

    2025年12月17日
    000
  • 如何在C语言中将整个数组作为参数传递给函数?

    数组 数组是一组具有相同名称的相关项。以下是将数组作为参数传递给函数的两种方式: 将整个数组作为参数传递给函数将单个元素作为参数传递给函数 将整个数组作为参数传递给函数 要将整个数组作为参数传递,只需在函数调用中发送数组名称。 要接收一个数组,必须在函数头中声明。 示例1 #includemain …

    2025年12月17日
    000
  • 使用C++编写,在矩阵中找到给定和的一对数字

    在本文中,我们将讨论在给定矩阵中查找具有给定和的对的程序。例如 – Input : matrix[n][m] = { { 4, 6, 4, 65 }, { 56, 1, 12, 32 }, { 4, 5, 6, 44 }, { 13, 9, 11, 25 } }, SUM = 20Out…

    2025年12月17日
    000
  • 检查一个二进制字符串是否可以通过删除非相邻字符来按降序排序

    在这个问题中,我们需要通过仅删除不相邻的元素来按降序对给定的二进制字符串进行排序。 为了解决这个问题,我们需要删除二进制字符串中所有位于 1 之前的 0。如果我们在字符串中的任何位置发现两个连续的零后面有两个连续的1,则意味着我们无法对字符串进行降序排序。否则,我们可以针对每种情况进行分类。 问题陈…

    2025年12月17日
    000
  • 计算两点之间距离的C程序

    给定两点坐标,任务是找到两点之间的距离并显示结果。 在二维平面中有两个点,假设 A 和 B 具有各自的坐标作为 (x1, y1) 和 (x2, y2) 并计算它们之间的距离,有一个直接公式,如下所示 $$sqrt{lgroup x2-x1rgroup^{2 }+lgroup y2-y1rgroup^…

    2025年12月17日
    000
  • C++程序初始化字典

    C++在同名的字典方面与Python不同,但它具有相似功能的相同数据结构。C++支持映射,可在STL类std::map中使用。映射对象在每个条目中包含一对值,一个是键值,另一个是映射值。键值用于在映射中搜索和唯一标识条目。而映射值不一定是唯一的,键值在映射中必须始终是唯一的。让我们看一下如何使用映射…

    2025年12月17日
    000
  • 根据给定条件,从数组中构建一个长度为K的二进制字符串

    在本教程中,我们需要构造一个长度为 K 的二进制字符串,如果使用数组元素可以实现等于 I 的子集和,则它的第 i 个索引处应包含“1”。我们将学习两种解决问题的方法。在第一种方法中,我们将使用动态规划方法来检查子集和等于索引“I”是否可能。在第二种方法中,我们将使用位集通过数组元素查找所有可能的和。…

    2025年12月17日
    000
  • 在C语言中,trunc()表示截断函数,truncf()表示截断函数(单精度),truncl()表示截断函数(长双精度)

    这里我们将看到三个函数。这些函数是 trunc()、truncf() 和 truncl()。这些函数用于将浮点值转换为截断形式。 trunc() 函数 该函数用于截断 double 类型值。并且只返回整数部分。语法如下。 double trunc(double argument) 示例 #inclu…

    2025年12月17日
    000
  • 使用C++移除包含+和-运算符的代数字符串中的括号

    给定一个像 p-(q-r)-s 这样的代数字符串,我们需要删除括号并将该字符串转换为具有相同数学结果的字符串。因此,字符串 p-(q-r)-s 被转换为 p-q+r-s,给出了相同的数学结果。为了实现这一点,我们可以使用堆栈并跟踪是否应该翻转括号表达式中即将出现的符号。 0 表示 + 或无翻转 1 …

    2025年12月17日
    000
  • C程序中的阶乘程序

    Given with the number n the task is to calculate the factorial of a number. Factorial of a number is calculated by multiplying the number with its sma…

    2025年12月17日
    000
  • 斯马兰达切-韦林序列

    这个问题包括打印前m个Smarandache-Wellin序列的项,其中m是任意正整数。我们将在C++中看到打印Smarandache-Wellin序列的前m项的算法。但在此之前,我们必须了解Smarandache-Wellin序列。 一个Smarandache-Wellin序列是由Smaranda…

    2025年12月17日
    000
  • 前n个自然数的平方和的和

    前 n 个自然数的平方和是求最多 n 项的平方和。本系列求 n 以内每个数字的和,并将该和添加到 sum 变量中。 前 4 个自然数的平方和之和为 – sum = ( 12) + (12 + 22 ) + (12 + 22 + 32) + (12 + 22 + 32 + 4 2 ) = …

    2025年12月17日
    000
  • 一个嵌套循环的谜题?

    在本节中,我们将看到一个有趣的问题。我们将看到两个代码段。两者都有两个嵌套循环。我们需要确定哪个会运行得更快。(我们将假设编译器不会对代码进行优化)。 代码段1 for(int i = 0; i < 10; i++){ for(int j = 0; j<100; j++){ //code…

    2025年12月17日
    000
  • C++程序,用于计算参与者在电影节上能完整观看多少部电影

    假设有一个电影节,展示来自不同国家的各种电影。现在,一个参与者想要参加尽可能多的不重叠的电影,我们需要帮助他们找出他们可以参加多少部电影。 有一个结构体 Movie,它有以下成员: 电影的开始时间。电影的持续时间。电影的结束时间。 还有一个结构体 Festival,它有以下成员: 电影节的电影数量。…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信