二维数组各行绝对值之和的最大值求解及代码问询
解决二维数组行绝对值和最大值问题
看起来你已经有了不错的开头,但代码还有几个需要修正和补全的地方,我来帮你完善它:
首先,先指出你现有代码里的几个小问题:
- 你硬编码了
maxRowValue数组,但方法参数是array,这样方法无法处理外部传入的数组,完全失去了通用性 - 计算行和的时候没有对元素取绝对值,这不符合“绝对值之和”的核心需求
- 代码写到一半中断了,后续的行和计算逻辑需要补全
下面是修正并完成后的完整代码:
public static int maxRowAbsSum(int[][] array) { // 先处理边界情况:避免空指针或无效输入 if (array == null || array.length == 0 || array[0].length == 0) { return 0; // 也可以根据需求抛出IllegalArgumentException } int maxSum = 0; // 遍历每一行 for (int row = 0; row < array.length; row++) { int currentRowSum = 0; // 计算当前行的绝对值之和 for (int col = 0; col < array[row].length; col++) { currentRowSum += Math.abs(array[row][col]); } // 比较并更新最大值 if (currentRowSum > maxSum) { maxSum = currentRowSum; } } return maxSum; } // 测试方法验证结果 public static void main(String[] args) { int[][] testArray = { {3, -1, 4, 0}, {5, 9, -2, 6}, {5, 3, 7, -8} }; System.out.println(maxRowAbsSum(testArray)); // 输出23,对应第三行的5+3+7+8 }
代码细节解释:
- 边界处理:先判断数组是否为空或行列长度为0,避免运行时抛出空指针异常
- 行遍历逻辑:外层循环逐个处理每一行
- 绝对值求和:内层循环对当前行的每个元素取绝对值后累加,满足需求
- 最大值更新:每计算完一行的和,就和当前记录的最大值对比,保留更大的那个
- 测试用例:用你给出的示例数组验证,第三行的绝对值和是23,确实是最大值
如果还需要记录最大值所在的行索引,只需要稍作修改添加一个变量即可:
public static int maxRowAbsSum(int[][] array) { if (array == null || array.length == 0 || array[0].length == 0) { return -1; // 用-1标记无效输入 } int maxSum = 0; int maxRowIndex = 0; for (int row = 0; row < array.length; row++) { int currentRowSum = 0; for (int col = 0; col < array[row].length; col++) { currentRowSum += Math.abs(array[row][col]); } if (currentRowSum > maxSum) { maxSum = currentRowSum; maxRowIndex = row; } } System.out.println("最大值所在行索引:" + maxRowIndex); return maxSum; }
这样就能同时拿到最大值和对应的行位置啦!
内容的提问来源于stack exchange,提问作者LtMuffin
相关产品推荐
相关产品推荐

