Min Max Problem:Short 解决方案不符合 15 个测试用例中的 3 个

Min Max Problem:Short Solution falling short of 3 test cases out of 15

hacker-rank 上有一个非常著名且简单的问题如下:

Given five positive integers, find the minimum and maximum values that can be calculated by summing exactly four of the five integers. Then print the respective minimum and maximum values as a single line of two space-separated long integers. Example arr = [1,3,5,7,9] The minimum sum is 1+3+5+7=16 and the maximum sum is 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));

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

基本上用 mapToLong 代替 mapToInt 而使用 longValue.

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