如何计算两个数组的交集值

how to compute value of intersection of two arrays?

本文关键字:数组 两个 何计算 计算      更新时间:2023-10-16

我能够编写一个函数来打印出两个数组的交集。但是,我正在尝试获取交叉点成员的值。

如果我们的最后一个交集是{6, 12}我应该返回 2 作为值,因为我有 2 个成员。我的返回值是 1,我不知道我做错了什么。

int main()
{
    int data1[] = { 3, 6, 9, 12};
    int data2[] = { 2, 4, 6, 8, 10, 12 };
    int result[] = {};
    size_t length1 = sizeof(data1)/sizeof(int);
    size_t length2 = sizeof(data2)/sizeof(int);
    size_t resultMax= 0;
    int i =0;
    int j =0;
    while (i < length1 && j < length2)
    {
        if (data1[i] < data2[j])
        {
            i++;
        }
        else if (data2[j] < data1[i])
        {
            j++;
        }
        else if (data1[i] == data2[j])
        {
            result[i] = data1[i];
            cout << "valor : " << result[i] << endl; // output is 6 and 12
            i++;
            j++;
            resultMax = sizeof(result[i])/sizeof(int);
        }
    }
    cout << "Final Size: "<< resultMax; //output is 0
    return resultMax;
}

使用 std::vector 而不是 array。

# include<iostream>
# include<vector>
using namespace std;
int main()
{
    vector<int> data1 = { 3, 6, 9, 12}, data2 = { 2, 4, 6, 8, 10, 12 }, result;
    int i = 0, j = 0, length1 = data1.size(), length2 = data2.size();
    while (i < length1 && j < length2)
    {
        if (data1[i] < data2[j])
            i++;
        else if (data2[j] < data1[i])
            j++;
        else if (data1[i] == data2[j])
        {
            result.push_back(data1[i]);
            cout << "valor : " << data1[i] << endl;
            i++;
            j++;
        }
    }
    cout << "Final Size: "<< result.size(); 
    return 0;
}

实时代码

使用算法库,特别是 std::set_intersection。

以下是上面链接的cpp首选项页面中略微改编的示例:

int main()
{
    std::vector<int> v1{3, 6, 9, 12};
    std::vector<int> v2{2, 4, 6, 8, 10, 12 };
    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());
    std::vector<int> v_intersection;
    std::set_intersection(v1.begin(), v1.end(),
                          v2.begin(), v2.end(),
                          std::back_inserter(v_intersection));
    std::cout << "Final Size: "<< v_intersection.size();
}