You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:25:23