簡體   English   中英

具有所有負數的數組中的最大行總和

[英]Max row sum in an array with all negative numbers

當每行的所有rowSum值均為正數時,以下代碼可以正常工作,但如果所有rowSum值均為負數(檢查負數> 0並每次均失敗),則該rowSum將失敗,並給出答案為0。 。 maxSum應該用什么初始化?

public static void findMaxRow(double[][] a){  
double maxSum = 0;
int maxRow = 0;

for (int row = 0; row < a.length; row++){

    double rowSum = 0;

    for (int column = 0; column < a[row].length; column++){
        rowSum += a[row][column];
    }

    if (rowSum > maxSum){
        maxSum = rowSum;
        maxRow = row;
    }
}}}

您的初始值

double maxSum = 0;

如果實際最大值為負,則導致maxSum保持為0。

將初始值更改為Double.NEGATIVE_INFINITY

double maxSum = Double.NEGATIVE_INFINITY;

您的算法失敗,因為包含至少一個負數的一組數字的總和可能小於零。

一種可靠的方法是將計算行總和的函數部分rowSum為函數rowSum這樣的函數。

然后,在調用站點,您可以將maxSum初始化為第一行的總和,然后在for循環中繼續其他行。 您還可以根據特定要求有效地處理零行情況。

另一種方法是將maxSum的類型更改為Double ,並將其初始化為null ,然后調整將新和與maxSum的當前值進行比較的代碼。 這種方式非常優雅地處理了零行情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM