1.构造前缀合数组
2.遍历数组,找到sum-arr[i]是否存在,存在就是一组答案(问题等价数组中找两个合为sum的值)
3.构造答案
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
int i,j;
int n = sum/2+1;
int[] arr = new int[n+1];
Map<Integer,Integer> map = new HashMap<>();
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
for(i=1;i<=n;i++)arr[i] = i+arr[i-1];//前缀和数组
for(i=0;i<=n;i++){
if(map.containsKey(arr[i]-sum)){
ArrayList<Integer> list = new ArrayList<>();
for(j = map.get(arr[i]-sum)+1; j<=i;j++)list.add(j);
if(list.size()>1)ans.add(list);//至少含两数
}
map.put(arr[i],i);
}
return ans;
}
}