滑动窗口,大于target,左边界增加。小于target,右边界加。窗口内的值要响应的变化。
和为S的连续正数序列
http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
左闭右开区间。start=1,end=1,终止条件:start<=target/2;
/** * 输出所有和为S的连续正数序列。序列内按照从小至大的顺序, * 序列间按照开始数字从小到大的顺序 * @param sum 和为S * @return 连续正数序列 */ public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); int start = 1, end = 1, nSum = 0; while (start <= sum / 2 ) { if (nSum < sum) { nSum += end; end++; } else if (nSum > sum) { nSum -= start; start++; } else { ArrayList<Integer> one = new ArrayList<>(); for (int i = start; i < end; i++) { one.add(i); } res.add(one); nSum -= start; start++; } } return res; }