1. 程式人生 > >劍指 offer:和為S的連續正數序列

劍指 offer:和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck! 

左神的思路,雙指標問題,當總和小於sum,大指標繼續+,否則小指標+

public class Solution {
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
        ArrayList<ArrayList<Integer>> allRes = new ArrayList<ArrayList<Integer>>();
        int high = 2,low = 1; 
        while(high > low){
            int cur_sum = (high + low) * (high - low + 1) / 2;
            if(cur_sum < sum)  high++;     
            else if(cur_sum > sum)  low++; 
            else {
                ArrayList<Integer> res = new ArrayList<Integer>();
                for(int i = low; i <= high; i++)
                   res.add(i);
                allRes.add(res);
                low++;
            }                                      
        }
        return allRes;
    }
}