zoukankan      html  css  js  c++  java
  • 剑指offer-和为S的连续正数序列

    题目描述

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

    输出描述:

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

    解题思路

    考虑用f和l记录序列的前后端点,其中f初始化为1,l初始化为2.当序列[f,l]的和等于sum时,依次把序列添加到vector中并加入到结果;当序列[f,l]的和小于sum时,需要向序列添加更大的数,所以让l加1;当序列[f,l]的和大于sum时,需要去掉序列中较小的数,所以让f加1.因为序列至少包括两个数,所以f最大为sum/2.

    代码

     1 class Solution {
     2 public:
     3     vector<vector<int> > FindContinuousSequence(int sum) {
     4         vector<vector<int> > vs;
     5         int f=1,l=2;
     6         while(f<=sum/2){
     7             int s=add(f,l);
     8             if(s==sum){
     9                 vector<int> v;
    10                 for(int i=f;i<=l;i++)
    11                     v.push_back(i);
    12                 vs.push_back(v);
    13                 f++;
    14             }
    15             else if(s<sum)
    16                 l++;
    17             else f++;
    18         }
    19         return vs;
    20     }
    21     int add(int f,int l){
    22         return (f+l)*(l-f+1)/2;
    23     }
    24 };
  • 相关阅读:
    PHP 反射 ReflectionClass
    go-字符串生成数据库字段
    grpc类型
    ubuntu安装zookeeper集群
    ubuntu安装JDK
    zookeeper分布式读写锁
    golang利用gob序列化struct对象保存到本地(转载)
    golang手动管理内存(转载)
    类json格式字符串打印
    研二寒假---关于Qt&CV曲线算法问题
  • 原文地址:https://www.cnblogs.com/wmx24/p/8889088.html
Copyright © 2011-2022 走看看