打印两个数组中的非公共元素
print non common elements from two arrays
我正在尝试打印两个数组之间的非公共元素。例如如果array1 = { 1, 3, 5}
和array2 = {1, 2, 4, 5}
,我的输出应该是{2, 3, 4}
。
我在这里尝试了一些东西。但它只打印 3。我做错了什么?
#include<iostream>
using namespace std;
int main()
{
int a[] = { 1, 3, 5 };
int b[] = { 1, 2, 4, 5 };
bool contains = false;
int result[10];
int r = 0;
int x;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (a[i] == b[j]) {
contains = true;
break;
}
}
if (!contains) {
result[r]=a[i];
++r;
}
else{
contains = false;
}
}
for (x = 0; x < r; x++)
{
cout<< result[x]<<"n";
}
return 0;
}
您没有将唯一值从 b
添加到 result
。但这是 c++。我建议使用std::vector
、std::sort
、std::set_symmetric_difference
和std::back_inserter
。
#include <iostream> // std::cout
#include <algorithm> // std::set_symmetric_difference, std::sort
#include <iterator> // std::back_inserter
#include <vector> // std::vector
int main()
{
std::vector< int > a = { 1, 3, 5 };
std::vector< int > b = { 1, 2, 4, 5 };
std::sort( a.begin(), a.end() );
std::sort( b.begin(), b.end() );
std::vector< int > result;
std::set_symmetric_difference( a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(result) );
for ( int x : result )
std::cout << x << "n";
return 0;
}
现场示例
正如@ChristianHackl在下面的评论中所建议的那样,也可以使用数组进行a
和b
,并使用独立的函数std::begin
和std::end
:
#include <iostream> // std::cout
#include <algorithm> // std::set_symmetric_difference, std::sort
#include <iterator> // std::back_inserter
#include <vector> // std::vector, std::begin, std::end
int main()
{
int a[]{ 1, 3, 5 };
int b[]{ 1, 2, 4, 5 };
std::sort( std::begin(a), std::end(a) );
std::sort( std::begin(b), std::end(b) );
std::vector< int > result;
std::set_symmetric_difference( std::begin(a), std::end(a), std::begin(b), std::end(b), std::back_inserter(result) );
for ( int x : result )
std::cout << x << "n";
return 0;
}
您将a
中的所有"唯一"值添加到result
但忘记将b
中的所有值添加到result
。
编辑
像这样:
for (int i=0; i < sizeof(b)/sizeof(int); ++i, ++r)
{
result[r] = b[i];
}
你的算法在这里是错误的。首先,您的代码以 o(a*b) 运行,其中 a 和 b 是列表长度。
此外,它只生成 A 中的元素,而不生成 B 中的元素。
执行此操作的方法是对两个列表进行排序,然后浏览 A 和 B,移动到最小的当前元素,如果两个当前元素不同,则将其添加到结果中。
这将在 o(log a + log b + a + b 中运行)。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀