劍指 offer:和為S的連續正數序列
阿新 • • 發佈:2018-12-10
小明很喜歡數學,有一天他在做數學作業時,要求計算出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; } }