搜索2D阵列中是否存在行,其总和等于同一2D阵列中另外两行的总和

时间:2015-11-15 20:02:34

标签: java

我试图遍历2D数组以找到一行,其总和等于同一2D数组中其他两行的总和。 在将sum2和sum3重置为零之前,我很难弄清楚如何比较;

对于sum2,

*:它的和将只是行(n-1)处的和,与sum3相同 * 只需要在将sum2和sum3重置为零之前找到比较的方法

boolean compare(int n, int [][] A)
    {
        int i, j, k, x, y, p, sum, sum2, sum3, total;

        //row
        for ( i = 0; i < n; i++)
        {
            sum = 0;
            //col
            for ( j = 0; j < n; j++)
                sum+= A[i][j];

            //row
            for ( k = 0; k < n; k++)
            {
                sum2 = 0;       
                //col
                if (k != i) 
                    for ( x = 0; x < n; x++)
                        sum2 += A[k][x];
            }       

            for ( y = 0; y < n; y++)
            {   
                sum3 = 0;
                if ( (y != k) && (y != i) )     
                    for ( p = 0; p < n; p++)    
                        sum3 += A[y][p];
            }

            total = sum2 + sum3;

            if ( sum == (total) )
                return true;                

        }//for ( i = 0; i < n; i++)


        return false;

}

非常感谢任何输入

****我们走了,我更新了我的代码如下:

boolean compare(int n, int [][] A)
{

    int i, j, k, x, y;

    int [] sumArray = new int[n];


    for (i = 0; i < n; i++)
    {
        sum = 0;
        for(j = 0; j < n; j++)
            sum += A[i][j];

        sumArray[i] = sum;
    }

    for ( k = 0; k < n; k++)
    {
        for(x = 0; x < n; x++)
        {
            if( x != k)
            {   
                for(y = 0; y < n; y++)
                {
                    if( (y != x) && (y != k) )
                    {
                        if( sumArray[k] == (sumArray[x] + sumArray[y]) )
                                return true;

                    }
                }

            }       
        }
    }

    return false;


}

1 个答案:

答案 0 :(得分:1)

似乎更容易计算每一行的总和并将它们放在一维数组中。然后,您可以以更简洁的方式比较每行的总和,并且还可以避免多次计算每行的总和。

此外,int n方法不需要参数compare(),因为您只需检查传入的数组的length属性。

public boolean compare(int[][] arr) {

    final int rowLen = arr.length;
    int[] sums = new int[rowLen];

    // Compute sum of each row
    for (int row = 0; row < rowLen; row++) {
        int rowSum = 0;
        int[] rowArr = arr[row];
        for (int col = 0; col < rowArr.length; col++)
            rowSum += rowArr[col];
        sums[row] = rowSum;
    }

    // Check if row n equals the sum of any other 2 rows
    for (int n = 0; n < sums.length; n++) {
        for (int i = 0; i < sums.length; i++) {
            for (int j = i + 1; j < sums.length; j++)
                if (n != i && n != j && sums[n] == sums[i] + sums[j]) {
                    // sum of row n equals sums of rows i+j
                    System.out.println("Sum of row " + n + " is equal to the sums of rows " + i + " and " + j);
                    return true;
                }
        }
    }

    return false;
}

免责声明:未经测试的代码,但它得到了我的观点