题解 | #和为S的连续正数序列#
和为S的连续正数序列
https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe
import java.util.ArrayList; public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); int start=1,end=2; int curSum=3; while(end<=(sum+1)/2){ if(curSum<sum){ end++; curSum = curSum+end; } else if(curSum>sum){ curSum -= start; start++; } else{ ArrayList<Integer> list = new ArrayList<>(); for(int i=start;i<=end;i++){ list.add(i); } res.add(list); end++; curSum += end; curSum -=start; start++; } } return res; } }
- 对于和为S的连续正数序列,且要求至少两个连续正数。利用滑动窗口的知识,设置左边界start=1,右边界end=2,初始总和为curSum=3;
- 将curSum与sum进行比较。若小于sum,右边界++(注意先end++,再curSum+end);若大于sum,左边界++;若等于sum,则找到一个连续序列。
- 对于循环的次数,只需while(end<=(sum+1)/2)。