【问题标题】:Min Max Problem:Short Solution falling short of 3 test cases out of 15最小最大问题:15 个测试用例中缺少 3 个测试用例的短解决方案
【发布时间】:2022-01-25 08:04:47
【问题描述】:

关于黑客等级有一个非常著名且简单的问题,如下所示:

给定五个正整数,找出可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为单行的两个空格分隔的长整数。 示例 arr = [1,3,5,7,9] 最小和为 1+3+5+7=16,最大和为 3+5+7+9=24。

现在,我解决了这个问题:

long max = Collections.max(intList);
     long min = Collections.min(intList);
     long sum = intList.stream().mapToInt(Integer::intValue).sum();
     System.out.println((sum-max)+" "+(sum-min));

它有效,但缺少 3 个测试用例。有什么建议或可以改进的地方吗?我正在努力提高我的编程技能,这是我在完全理解之前不想放手的事情。

谢谢!

编辑

这是改进后的代码以及任何正在寻找的人的答案:

long max = Collections.max(arr);
         long min = Collections.min(arr);
         long sum = arr.stream().mapToLong(Integer::longValue).sum();
         System.out.println((sum-max)+" "+(sum-min));

【问题讨论】:

    标签: java algorithm arraylist data-structures


    【解决方案1】:

    我看到的唯一问题是您应该计算long 结果,但正在计算int 中的中间值(例如总和)。这可能会导致类型溢出。

    基本上将mapToInt 替换为mapToLong 而使用longValue

    PS:否则我喜欢你的解决方案,因为它简洁并且很好地利用了 API。如果您追求像素完美的性能,您可能希望在列表中节省不必要的循环,但这确实是一种极端优化(因为您的解决方案在复杂性上也是线性的),我怀疑它会有所作为。

    【讨论】:

    • 这听起来是我发布的解决方案唯一可能的缺点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多