若干个正整数之和为给定值
/**(1)找起始和终点位置,用等差求和公式,时间为O(n^2) * (2)sum==n(n-1)/2+n*start,n为长度,start为起始值,这样用sum-n(n-1)/2对n取模看是否为整数,时间大概为O(n)但是这道题却要求了顺序 * (3)双指针的变形,滑动窗口口。 * */ import java.sql.Array; import java.util.*; public class Solution { public static void main(String args[]){ System.out.println(new Solution().FindContinuousSequence(15)); } public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer> > res=new ArrayList<ArrayList<Integer> >(); if(sum<=2) return res; int left=1,right=2; while(right<=sum/2+1){ int key=(left+right)*(right-left+1)/2; if(key==sum){ ArrayList<Integer> t =new ArrayList<>(); for(int i=left;i<=right;i++) t.add(i); res.add(new ArrayList<>(t)); right++; continue; }else if(key<sum){ right++; }else left++; } return res; } }