前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【剑指Offer】57.2 和为S的连续正数序列

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

作者头像
瑞新
发布2020-12-07 10:13:01
2920
发布2020-12-07 10:13:01
举报
文章被收录于专栏:用户3288143的专栏

NowCoder

题目描述

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

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

代码语言:javascript
复制
[9, 10, 11, 12, 13, 14, 15, 16]
[18, 19, 20, 21, 22]。

解题思路

双指针

代码语言:javascript
复制
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;
    }
}
代码语言:javascript
复制
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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 解题思路
    • 双指针
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档