我有两个数组,每个数组都有一些值,例如:
int a[] = {1, 2, 3, 4};
int b[] = {0, 1, 5, 6};
现在我需要将数组(a)的元素与数组(b)中的元素进行比较。 如果有任何匹配程序应该返回错误或打印“错误有重复值”等。 在上述情况下,它应该返回一个错误coz a [0] = b [1]因为它们具有相同的值。
我该怎么做?
答案 0 :(得分:7)
如果阵列很小,我只会采用暴力方法,并遍历两个阵列:
for (int i=0;i<4;++i)
{
for (int j=0;j<4;++j)
{
if (a[i] == b[j])
{
// Return an error, or print "error there is a duplicate value" etc
}
}
}
如果您要处理大型数组,您可能需要考虑更好的算法,因为这是O(n ^ 2)。
例如,如果对某个数组进行了排序,则可以更快地检查匹配,尤其是当数组的长度变大时。不过,如果你的数组总是总是只有几个元素,我就不会为任何更复杂的事情而烦恼。
答案 1 :(得分:3)
假设两个数组都已排序,您可以像这样对它们进行步骤:
// int array1[FIRSTSIZE];
// int array2[SECONDSIZE];
for(int i=0, j=0; i < FIRSTSIZE && j < SECONDSIZE; ){
if(array1[i] == array2[j]){
cout << "DUPLICATE AT POSITION " << i << "," << j << endl;
i++;
j++;
}
else if(array1[i] < array2[j]){
i++;
}
else{
j++;
}
}
这应该具有线性复杂性,但只有在它们被排序时才有效。
答案 2 :(得分:2)
已发布已排序数组的解决方案。如果未对数组进行排序,则可以从每个数组中构建一个集合(例如std::set
或哈希集),并查看这些集是否是不相交的。您可能必须在集合中存储值索引对,以找出哪个索引是重复的(并适当地重载比较运算符)。这可能会给O( n log n )带来复杂性。
答案 3 :(得分:0)
//v={1,2,3,4}; vector
//v1={1,2,3,4} vector
bool f=0;
if(equal(v.begin(),v.end(),v1.begin())) //compare two vector, if equal return true
{
f=1;
}
}
if(f==1)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
enter code here