码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer四十一之和为S的连续正数序列

时间:2017-10-12 23:10:54      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:mina   term   display   arraylist   min   链接   分享   四十一   思路   

一、题目

   题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

     输出描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

二、思路

  双指针问题。当总和小于sum,大指针继续+,否则小指针+。详解代码。

三、代码

技术分享
import java.util.ArrayList;


public class Solution {
    public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {

        ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>();

        int phigh = 2, plow = 1;

        while (phigh > plow) {
            int curSum = (phigh + plow) * (phigh - plow + 1) / 2; //求序列的和
            if (curSum < sum)
                phigh++;
            if (curSum == sum) {
                ArrayList<Integer> arrayListTemp=new ArrayList<Integer>();
                for (int i = plow; i <= phigh; i++){
                    arrayListTemp.add(i);
                }
                arrayList.add(arrayListTemp);
                plow++;
            }

            if (curSum > sum)
                plow++;
        }

        return arrayList;
    }
}
View Code

---------------------------------------------

参考链接:

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

剑指offer四十一之和为S的连续正数序列

标签:mina   term   display   arraylist   min   链接   分享   四十一   思路   

原文地址:http://www.cnblogs.com/hezhiyao/p/7658453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!