您的位置:首页 > Web前端

剑指offer-和为S 的连续正数序列-Java

2018-03-27 12:24 369 查看
题目描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的
4000
顺序
思路解析:

用一个代表最小值,另一个代表最大值,还有一个累加求和
最小值小于mid可以减少时间复杂度
如果总和小于目标和,那么就把最大值加1;如果总和大于目标和,那么就把最小值加1(后移)
如果相等,就加入ArrayList类型的listall,注意add就是循环。
代码:import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> listall = new ArrayList<ArrayList<Integer>>();
if(sum<3){
return listall;
}
int small=1;
int big = 2;
int mid = (sum+1)/2;
int cursum=small+big;
while(small<mid){
while(cursum>sum&&small<mid){
cursum = cursum-small;
small++;
}
if(cursum==sum){
ArrayList<Integer> listsum = new ArrayList<Integer>();
add(listsum,small,big);
listall.add(listsum);
}
big++;
cursum = cursum+big;
}
return listall;

}
private static void add(ArrayList<Integer> list,int small,int big){
for(int i=small;i<=big;i++){
list.add(i);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: