[英]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.