和为S的连续正数序列
使用双指针求解,这里做了一个优化,即最少两数之和为S,那么最大为s/2。因此只需要遍历到s/2即可求出结果。
-
当当前的和小于S时,需要让j++,并将其值加入
-
否则,当刚好为S时,记录答案
-
当当前和大于等于S时,删除list中的第一条记录并让i++;
样例
class Solution {
public List<List<Integer> > findContinuousSequence(int sum) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> ans = new ArrayList<>();
int s = sum + 1 >> 1;
int i = 1,j = 1;
int Sum = 0;
while (j <= s || i <= s){
if (Sum < sum){
ans.add(j);
Sum += j++;
}
if (Sum == sum){
List<Integer> temp = new ArrayList<>(ans);
res.add(temp);
}
if (Sum >= sum){
Sum -= i++;
ans.remove(0);
}
}
return res;
}
}