需要了解如何解决此算法难题

Need an idea about how to solve this algorithm puzzle

本文关键字:解决 算法 难题 了解 何解决      更新时间:2023-10-16

所以,这是一个C++作业问题,我已经尝试了很长时间,但无法正确理解。这是个问题:

给定两个具有相同长度的整数数组,A [0..n-1] 和 B [0..n-1]。有必要找到第一对索引 i0 和 j0, i0 <= j0,使得 A [i0] + B [j0] = 最大 A [i] + B [j],其中 0 <= i <n,><= j <n,><= j.

int maxSum(int arrx[], int arry[], int x){
    int i=0, j=0;
    int a;
    while(i <= j && j < x){
        a = arrx[i] + arry[j];
        if(a > arrx[i]){
            cout << i << " " << j << " ";
            i = x;
        }else{
            j++;
        }
    }
    return 0;
}

应该是 I/O 的示例:输入:

4 -8 6 0

-10 3 1 1

输出:

0 1

如果我理解你的问题,这应该可以。答案是从您的输入数据中给出的 7:

    int maxSum(int[] arrx, int[] arry, int n)  // n is the size (count) of the array
    {
        int i;
        int j;
        int a;
        int maxVal;
        int saveI;
        int saveJ;
        // first, set maxVal to minimum to make sure you get max val (0 is not necessarily     min value)
        maxVal = 0;
        for (i = 0; i <= (n - 1); i++)
        {
            if (arrx[i] < maxVal)
                maxVal = arrx[i];
            if (arrx[j] < maxVal)
                maxVal = arrx[j];
        }
        // now, crawl through the arrays
        for (j = 0; j <= (n - 1); j++)
        {
            for (i = 0; i <= j; i++)
            {
                a = arrx[i] + arry[j];
                if (a > maxVal)
                {
                    maxVal = a;
                    saveI = i;
                    saveJ = j;
                    cout << i << " " << j << " " << a " ";
                }
            }
        }
        return maxVal;
    }