JAVA中有很多數學問題可以通過編程解決,比如求連續自然數和為n的值。
public static void findContinuousSequence(int sum) { int small = 1, big = 2; int curSum = 3; while (small< big) { if (curSum == sum) { printContinuousSequence(small, big); } while (curSum >sum && small< big) { curSum -= small; small++; if (curSum == sum) { printContinuousSequence(small, big); } } big++; curSum += big; } } public static void printContinuousSequence(int small, int big) { for (int i = small; i<= big; i++) { System.out.print(i + " "); } System.out.println(); }
這里使用了雙指針的思想,從1和2開始,計算當前區間內數的和,如果等于n,則輸出結果;如果大于n,則縮小區間左端點small的值,重新計算區間和;如果小于n,則擴大區間右端點big的值,重新計算區間和。這樣不斷更新區間,直到小指針small大于等于中指針big停止。
在雙指針算法中,有幾個細節需要注意:
- 當small大于等于(sum+1)/2時,肯定不會有連續的數序列和等于sum。因為序列至少包含兩個數,此時第一個數最大為sum/2,再加上后面的數就已經超過sum了。
- 不要忘記最后一個連續的數序列的輸出。
上一篇css中的顏色查詢