[英]How to optimize code using Java concurrency [on hold]
這段代碼花費了太多時間來解決 Hackerrank 問題。 我想使用並發來更快地解決它。
Hackerrank 問題:給定一個數 N,找出將這個數表示為 2 個或更多連續自然數之和的方法數。
public class WaysToSumNumber {
static int countConsecutive(int num) {
int count = 0;
for (int i = 1; i * (i + 1) < 2 * num; i++) {
float a = (float) ((1.0 * num - (i * (i + 1)) / 2) / (i + 1));
if (a - (int) a == 0.0)
count++;
}
return count;
}
public static void main(String[] args) {
int num = 15;
System.out.println(countConsecutive(num));
}
}
我花了一分鍾才弄清楚你是如何計算的,包括這可能有助於更快地得到回復。 似乎您正在使用 Arithmetic Progressions 的解決方案,當您從該方程式獲得 integer 結果時, a
方程式應該是問題的解決方案。 一旦我發現我能夠使其並行,這就是解決方案。
static int countConsecutive(int num) {
return (int) IntStream.range(1, (int) Math.sqrt(2 * num)).parallel().filter(i -> {
float a = (float) ((1.0 * num - (i * (i + 1)) / 2) / (i + 1));
return a - (int) a == 0.0;
}).count();
}
我發現,對於網站上的一些 Java 問題,它運行得太慢而無法完成。 有些人使用更好的解決方案從掃描儀和其他東西獲取輸入。 您有時可以在討論線程中看到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.