Пересечение двух сортированных массивов

Учитывая два сортированных массива: A и B. Размер массива A La и размер массива B Lb. Как найти пересечение A и B?

Если La намного больше, чем Lb, затем там будет какое-либо различие для перекрестного алгоритма нахождения?

14
задан codaddict 9 May 2012 в 12:25
поделиться

3 ответа

Используйте set_intersection как here. Обычная реализация будет работать аналогично части слияния алгоритма merge-sort.

9
ответ дан 1 December 2019 в 05:51
поделиться
void Intersect()
{
    int la, lb;
    la = 5;
    lb = 100;
    int A[5];
    int i, j, k;
    i = j = k = 0;
    for (; i < 5; ++i)
        A[i] = i + 1;
    int B[100];
    for (; j < 100; ++j)
        B[j] = j + 2;
    int newSize = la < lb ? la : lb;
    int* C = new int[newSize];
    i = j = 0;
    for (; k < lb && i < la && j < lb; ++k)
    {
        if (A[i] < B[j])
            i++;
        else if (A[i] > B[j])
            j++;
        else
        {
            C[k] = A[i];
            i++;
            j++;
        }
    }
    for (k = 0; k < newSize; ++k)
        cout << C[k] << NEWLINE;
}
1
ответ дан 1 December 2019 в 05:51
поделиться

Поскольку это похоже на HW... я дам вам алгоритм:

Let arr1,arr2 be the two sorted arrays of length La and Lb.
Let i be index into the array arr1.
Let j be index into the array arr2.
Initialize i and j to 0.

while(i < La and j < Lb) do

    if(arr1[i] == arr2[j]) { // found a common element.
        print arr[i] // print it.
        increment i // move on.
        increment j
    }
    else if(arr1[i] > arr2[j])
        increment j // don't change i, move j.
    else
        increment i // don't change j, move i.
end while
48
ответ дан 1 December 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: