public class lzwCode {
public static void main(String[] args) {
findCount(15);
}
/**
* 题目:输入一个正数n,输出所有和为n连续正整数序列。
*
* 例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
*
* 思路:因为整数序列是有序的,可以设立两个游标begin和end,通过判区间[begin,end]
* 的和是否为N来得到这个序列。如果区间和大于n,begin往前移动,如果小于n,end往前移动,
* 等于就输出这个区间。时间复杂度是0(n)。
*
* @param n
*/
public static void findCount(int n) {
int begin = 1;
int end = 2;
int sum = begin + end;
while (begin < end && begin < (n + 1) / 2) {
if (sum < n) {
end++;
sum += end;
} else if (sum > n) {
sum -= begin;
begin++;
} else {
System.out.println(begin + " 到 " + end + " 和等于 " + n);
sum -= begin;
begin++;
}
}
}
}
控制台结果:
1 到 5 和等于 15
4 到 6 和等于 15
7 到 8 和等于 15