黑客等級有一個非常著名且簡單的問題,如下所示:
給定五個正整數,找出可以通過將五個整數中的四個恰好相加來計算的最小值和最大值。然后將各自的最小值和最大值列印為單行的兩個空格分隔的長整數。示例 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));
uj5u.com熱心網友回復:
我看到的唯一問題是您應該計算long結果,但正在計算int. 這可能導致型別溢位。
基本上mapToInt用mapToLong相當代替longValue。
PS:否則我喜歡你的解決方案,因為它簡潔并且很好地利用了 API。如果您追求像素完美的性能,您可能希望在串列中節省不必要的回圈,但這確實是一種極端優化(因為您的解決方案在復雜性上也是線性的),我懷疑它是否會有所作為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422812.html
標籤:
上一篇:如何使我的代碼用于計算將每個專案除以2的最小可能方法?
下一篇:確定多邊形是否為星形
