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

和为S的连续正整数序列

时间:2018-02-01 00:14:16      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:sequence   扩大   subject   push   数字   ret   sub   amp   ==   

题目描述

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

输出描述:

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

思路:定义范围不断向后扩展,如果当前范围内的和小于S;范围向后扩大一个,如果当前范围内的和大于S,范围缩小一个;如果相等,即为一个解。时间复杂度为O(n)
 1 class Solution {
 2 public:
 3     void pushToResult(vector<vector<int>> &res, int left, int right)
 4     {
 5         vector<int> tmp;
 6         while(left<=right)
 7         {
 8             tmp.push_back(left);
 9             ++left;
10         }
11         res.push_back(tmp);
12     }
13     vector<vector<int> > FindContinuousSequence(int sum) {
14         vector<vector<int>> res;
15         if(sum<=2)return res;
16         int left=1;
17         int right=2;
18         int total=3;
19         while(right<=sum/2+1)
20         {
21             if(total==sum)
22             {
23                 pushToResult(res, left, right);
24                 total=total-left;
25                 ++left;
26             }
27             else if(total<sum)
28             {
29                 ++right;
30                 total=total+right;
31             }else{
32                 total=total-left;
33                 ++left;
34             }
35         }
36         return res;
37     }
38 };

 

 

和为S的连续正整数序列

标签:sequence   扩大   subject   push   数字   ret   sub   amp   ==   

原文地址:https://www.cnblogs.com/jeysin/p/8394920.html

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