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

    题目:

      和为S的连续正数序列

    链接:

      https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?tpId=13&tqId=11194&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    题目描述:

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

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

    思路:

      设置一个path变量,存放当前的数字序列,和一个csum代表当前序列的和,如果csum>sum 则去除小值,如果<sum, 增加大值,如果==sum则打印

    代码:

      

     1 class Solution {
     2 public:
     3     vector<vector<int>> FindContinuousSequence(int sum){
     4         if(sum <= 2){
     5             return res;
     6         }
     7         path = {1};
     8         int csum =1;
     9         for(int i = 2;i<= (sum+1)/2;++i){
    10             path.push_back(i);
    11             csum += i;
    12             if(csum == sum ){
    13                 res.push_back(path);
    14             }
    15             else{
    16                 while(csum>sum){
    17                     csum -= path[0];
    18                     path.erase(path.begin());
    19                 }
    20                 if(csum == sum){
    21                     res.push_back(path);
    22                 }
    23             }
    24         }
    25         return res;
    26     }
    27 private:
    28     vector<vector<int>> res;
    29     vector<int> path;
    30 };
  • 相关阅读:
    初识redis
    支付宝退款操作
    《地质灾害防治这一年2013》读书摘要
    地质灾害防治工作的经验和体会
    关于地质灾害防治的一些认识
    应急信息报送和值班工作的培训学习
    《地质灾害防治这一年2012》读书摘要
    关于开源GIS和商业GIS的讨论
    B树索引学习
    cordova 开发 ios app 简要流程
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6945803.html
Copyright © 2011-2022 走看看