簡體   English   中英

如何使用 Java 並發優化代碼 [暫停]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM