和为S的连续正数序列

http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe

import java.util.ArrayList;

/**
思路:
输入sum=20(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1,定义两个指针,左指针从1开始,右指针从2开始
循环开始
2,求和(1+2 = 3
3,如果判断3小于20,右指针++,2变为3,求和3+3=6。循环一直到右指针=6,和为21。
4,else if 判断21大于20,左指针++,1变为2,和减去左指针值,和为21-1=20。
5,else 和与输入一样,存数。   【再把右指针++,求和,求剩余组合】
循环结束
*/
public class Solution {
    public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
        ArrayList<ArrayList<Integer>> resp = new ArrayList<>();
        if(sum <= 0){
            return resp;
        }
        int leftP = 1;
        int rightP = 2;
        int sumVal = leftP + rightP;

        while(sum > rightP){
            if(sumVal < sum){
                rightP++;
                sumVal += rightP;
            } else if (sumVal > sum){
                sumVal -= leftP;
                leftP++;
            } else {
                ArrayList<Integer> list = new ArrayList<>();
                for (int i=leftP; i<=rightP; i++) {
                    list.add(i);
                }
                resp.add(list);

                rightP++;
                sumVal += rightP;
            }
        }

        return resp;

    }
}
全部评论
看了剑指offer书上的思路,才写出来的
1 回复 分享
发布于 2020-01-16 23:38
请问为什么用 ArrayList<arraylist><integer>> 而不是 ArrayList<integer> 呢?</integer></integer></arraylist>
点赞 回复 分享
发布于 2021-03-22 10:36
对于这题,最先判断应该是if(sum<=2)return resp吧
点赞 回复 分享
发布于 2020-11-18 23:22
粘贴你的代码是数组越界等非法访问情况
点赞 回复 分享
发布于 2020-05-08 10:16
wehile条件改成while (left < right && right < sum) 会好一点吧,提前结束。
点赞 回复 分享
发布于 2020-04-13 15:28
我也觉得这么改好一点,因为和的一半是一个节点,往后的都不用遍历了,比如81=40+41,那从41开始往后都不可能有序列了
点赞 回复 分享
发布于 2020-04-01 13:59
while(sum > rightP) 条件是不是可以改为 while((sum/2+1) >= rightP)
点赞 回复 分享
发布于 2020-03-28 16:12

相关推荐

秋招结束已经一段时间了&nbsp;一直在忙着毕业的事情&nbsp;浅浅总结一下自己的秋招经历吧~本人BG双非硕&nbsp;后端选手&nbsp;有一段小厂+腾讯暑期实习腾讯暑期转正loser秋招结束已经结束了有一段时间了总结一下秋招历程最大的感受就是秋招比起暑期更加卡学历秋招总共投了60多家吧一直面&nbsp;一直挂也投了两家银行科技岗&nbsp;都走到终面体检了都拒了(总体感觉本地的银行还是挺容易过的)可能本人更想去私企&nbsp;并且银行也挺卷听说一直到11月就只有一家小厂的offer并签约当保底然后也突然被WXG捞了&nbsp;本来都不对腾讯抱有希望了可能经过一整个秋招的面试积累吧&nbsp;以及本人有ACM经历&nbsp;WXG整体面试以做题偏多(一二面做了5道题&nbsp;4道hard)&nbsp;比较合自己胃口&nbsp;差不多半个月就把五轮面试过了进入录用评估&nbsp;但也一直没有结果到后面也陆陆续续有几家中厂也终面过泡池子一直到12月初华子给开了base杭州&nbsp;14a因为华子公积金的原因&nbsp;和小厂薪资上差距不大&nbsp;所以也一直犹豫是否毁约签华子&nbsp;但是内心也还对WXG抱有一丝幻想(虽然一直没有保温也没有任何消息)然后一直到12月中下旬&nbsp;华子要求去现场签约了&nbsp;但是WXG还是没有消息&nbsp;然后就连续发邮件和打电话催了好多次&nbsp;还是回复耐心等待直到华子签约那天&nbsp;经过内心挣扎已经决定毁约签华子了&nbsp;可能还是想平台更大一点吧&nbsp;然后最戏剧性的一幕来了&nbsp;就在我发毁约邮件没有5秒&nbsp;WXG打电话开奖了&nbsp;并且开奖也十分有诚意&nbsp;最终还是没有签约成功华子&nbsp;研究生期间也打了很多次华子的比赛还是对华子有感情的555整个秋招都是伴随着焦虑的&nbsp;我认为自己也是秋招大部分人的画像&nbsp;屡屡碰壁后不断怀疑自己&nbsp;但是可能自己也比较幸运吧&nbsp;但是也感谢自己在一次次陷入迷茫都没有放弃自己&nbsp;还是一直努力背八股&nbsp;刷题也祝各位牛友们共勉&nbsp;就算暂时没有好的offer&nbsp;不放弃一定会有好的结果的!!
点赞 评论 收藏
分享
评论
36
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务