Min-Max Sum问题Java实现求助:10/15测试用例未通过
问题诊断与修复:Mini-Max Sum 代码问题
核心问题分析
你的代码大部分测试用例失败的主要原因有两个:
- 整数溢出:使用
int类型存储总和,当输入的正整数较大时(比如接近Integer.MAX_VALUE),五个数的总和会超出int的取值范围(-231到231-1),导致计算结果错误。题目要求输出长整数,必须用long类型来存储总和。 - 冗余循环:代码中用了两次循环分别计算最小和与最大和,既增加了代码冗余,也提升了出错概率,其实一次循环就能完成总和、最小值、最大值的计算。
修复后的代码
import java.util.List; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.stream.Collectors; import java.util.stream.Stream; class Result { public static void miniMaxSum(List<Integer> arr) { // 使用long类型避免大数值溢出 long totalSum = 0; long minVal = arr.get(0); long maxVal = arr.get(0); // 一次遍历完成总和、最小值、最大值的计算 for (int num : arr) { totalSum += num; if (num < minVal) { minVal = num; } if (num > maxVal) { maxVal = num; } } // 最小和 = 总和 - 最大值;最大和 = 总和 - 最小值 long minSum = totalSum - maxVal; long maxSum = totalSum - minVal; System.out.println(minSum + " " + maxSum); } } public class Solution { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); List<Integer> arr = Stream.of(bufferedReader.readLine().trim().split(" ")) .map(Integer::parseInt) .collect(Collectors.toList()); Result.miniMaxSum(arr); bufferedReader.close(); } }
关键修复点说明
- 数据类型替换:将所有存储总和、极值的变量改为
long类型,彻底避免大数值计算时的溢出问题。 - 循环逻辑优化:仅用一次遍历就完成总和、最小值、最大值的计算,简化代码结构的同时提升执行效率。
- 输入处理优化:用
trim()替代replaceAll("\\s+$", ""),更简洁地去除输入字符串首尾的空白字符,逻辑更清晰。
内容的提问来源于stack exchange,提问作者hii
相关产品推荐
相关产品推荐

