和为s的连续整数序列
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
解题思路
双指针法
用指针low和high表示连续闭区间[low,high],那么该区间所有的数的和为
cur = (high-low+1)(high+low)/2。
- 若cur < sum,说明以low开头的区间的数加起来还不够,所以区间要拓宽,high++
- 若cur = sum,区间[low,high]满足条件,先把所有数push到一个临时数组list中,再把数组push到结果数组res中,low++(想想也不会是high++)
- 若cur > sum,说明以low开头,找不到一个high能使区间[low,high]满足条件,所以起始位置就要变,low++
function FindContinuousSequence(sum