我有两个阵列2层的元件的每个阵列具有例如一些值:比较C两个阵列++
int a[] = {1, 2, 3, 4};
int b[] = {0, 1, 5, 6};
现在我需要的阵列(A)中的元素与阵列元件相比较(b)中.. 如果有什么匹配的程序应该返回一个错误或打印“错误有重复的值”等。 在上述情况下,它应该返回一个错误coz a [0] = b [1],因为两者具有相同的值。
我该怎么做?
我有两个阵列2层的元件的每个阵列具有例如一些值:比较C两个阵列++
int a[] = {1, 2, 3, 4};
int b[] = {0, 1, 5, 6};
现在我需要的阵列(A)中的元素与阵列元件相比较(b)中.. 如果有什么匹配的程序应该返回一个错误或打印“错误有重复的值”等。 在上述情况下,它应该返回一个错误coz a [0] = b [1],因为两者具有相同的值。
我该怎么做?
如果阵列是这个小,我只想做一个蛮力方法,并遍历两个数组:
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表示这是一个二次复杂算法,不适合大数据集。 – stinky472 2010-06-30 17:38:34
谢谢我刚添加标志和循环后 如果别的意见 并做:) 谢谢 – SolidSnake 2010-06-30 17:47:11
假设两个数组进行排序,可以一步到位,虽然他们他们是这样的:
// 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++;
}
}
这应该有线性复杂,但如果他们整理它才会起作用。
排序数组的解决方案已经发布。如果未对数组进行排序,则可以从每个数组中构建一个集(例如std::set
或散列集),并查看这些集是否不相交。您可能必须将值对索引对存储在集合中才能找出哪个索引重复(并适当地重载比较运算符)。这可能会给O(n log n)的复杂性。
我喜欢这个答案。我应该注意到:散列集合在TR1中实现。 std :: tr1 :: unordered_set和boost :: unordered_set。 TR1在GCC和Visual Studio中均实现,因此std :: tr1 :: unordered_set应该是“足够标准”的。假设一切都与unordered_set一起工作,你应该能够在O(n)中做到这一点。 – Dragontamer5788 2010-06-30 21:49:56
//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
它们会被排序吗? – 2010-06-30 17:35:32
数组是否已知被排序? – 2010-06-30 17:35:43