如何在多个数组中找到匹配的值
How to find matching values in several arrays
本文关键字:数组 更新时间:2023-10-16
我有N个整数数组,每个数组的长度未知。我必须在所有数组中找到匹配的对值,最好的方法是什么?例如,给定这个阵列-
const int array_01 [8] = {1, 8, 6, 7, 9, 1, 3, 7};
const int array_02 [11] = {3, 2, 1, 8, 2, 8, 4, 5, 9, 7, 10};
const int array_03 [10] = {4, 0, 6, 7, 7, 2, 1, 2, 2, 9};
匹配将是-
array_01, array_02 - 1, 3, 7, 8.
array_01, array_03 - 1, 6, 7.
array_02, array_03 - 1, 3.
试试这个。您可以获得2个数组的匹配对。
function match_array(array1, array2){
var match = array();
for(int i = 0; i < array1.length; i++)
for(int j = 0; j < array2.length; j++){
if(array1[i] == array2[j]){
match.push(array1[i]);
}
}
return match;
}
解决此问题的最佳方法是用一个数组的元素准备一个集合std::unordered_set
(O(n1)
,其中n1
是第一个数组中的元素数)。
然后迭代第二个数组的元素,注意第一个数组中已经存在的元素(O(n2)
,其中n2
是第二个阵列中的元素数量)。
总时间复杂度O(n1 + n2)
如果使用成对的数组进行匹配,那么一开始就有N
数组也没有什么区别。
这个实用的例子将两个数组都转换为集合(对于您的目的来说,它更实用),然后迭代:
std::unordered_set<int> set1, set2;
for(int i = 0; i < sizeof(array_01)/sizeof(array_01[0]); i++)
set1.insert(array_01[i]);
for(int i = 0; i < sizeof(array_02)/sizeof(array_02[0]); i++)
set2.insert(array_02[i]);
for(auto it = set2.begin(); it != set2.end(); ++it )
if(set1.count(*it)>0)
std::cout << "repeated " << *it;
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '