【剑指Offer】57.2 和为S的连续正数序列

   日期:2020-08-31     浏览:76    评论:0    
核心提示:NowCoder题目描述输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:[9, 10, 11, 12, 13, 14, 15, 16][18, 19, 20, 21, 22]。解题思路双指针import java.util.ArrayList;public class Solution { public ArrayList > FindContinuousSequence(int tar) {

NowCoder

题目描述

输出所有和为 S 的连续正数序列。

例如和为 100 的连续序列有:

[9, 10, 11, 12, 13, 14, 15, 16]
[18, 19, 20, 21, 22]。

解题思路

双指针

import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int tar) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        for(int i = 1, j = 1, sum = 1; i < tar; i++) {
        	// 连续的一段
            while(sum < tar) {
                j++;
                sum += j;
            }
            if(sum == tar && j - i >= 1) {
                ArrayList<Integer> arr = new ArrayList<>();
                for(int k = i; k <= j; k++) 
                    arr.add(k);
                res.add(arr);
            }
            sum -= i;
            // i变大同时j变大
        }
        return res;
    }
}
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
    ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
    int start = 1, end = 2;
    int curSum = 3;
    while (end < sum) {
        if (curSum > sum) {
            curSum -= start;
            start++;
        } else if (curSum < sum) {
            end++;
            curSum += end;
        } else {
            ArrayList<Integer> list = new ArrayList<>();
            for (int i = start; i <= end; i++)
                list.add(i);
            ret.add(list);
            curSum -= start;
            start++;
            end++;
            curSum += end;
        }
    }
    return ret;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服