Сравните 2 элемента из двух массивов в C ++ - PullRequest
4 голосов
/ 30 июня 2010

У меня есть два массива, каждый массив имеет несколько значений, например:

int a[] =  {1, 2, 3, 4};
int b[] =  {0, 1, 5, 6};

Теперь мне нужно сравнить элементы массива (a) с элементами массива (b). если есть совпадение, программа должна вернуть ошибку или вывести «ошибка, есть дублирующее значение» и т. д. в вышеуказанной ситуации он должен вернуть ошибку coz a [0] = b [1], поскольку оба имеют одинаковые значения.

Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 30 июня 2010

Если бы массивы были такими маленькими, я бы просто применил метод грубой силы и провел бы цикл между обоими массивами:

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).

Если, например, один из ваших массивов отсортирован, вы можете гораздо быстрее проверять совпадения, особенно когда длина массива увеличивается. Я бы не стал заниматься чем-то более сложным, если ваши массивы всегда будут иметь длину несколько элементов.

3 голосов
/ 30 июня 2010

Предполагая, что оба массива отсортированы, вы можете настроить их следующим образом:

// 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 голосов
/ 30 июня 2010

Решение для отсортированных массивов уже опубликовано. Если массивы не отсортированы, вы можете создать набор (например, std::set или хэш-набор) из каждого и посмотреть, не являются ли наборы непересекающимися. Возможно, вам придется хранить пары «значение-индекс» в наборах, чтобы выяснить, какой индекс был дубликатом (и перегрузить операторы сравнения соответствующим образом). Это может привести к сложности O ( n log n ).

0 голосов
/ 14 апреля 2017
//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
...