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

    思路:

    用两个数small和big分别表示序列的最小值和最大值。

    首先把small初始化为1,big初始化为2.

    如果从small到big的序列的和大于sum,就去掉序列中最小的值,也即是增大small的值;

    如果和小于sum,那就让这个序列包含更多的数字,因为,这个序列至少要两个数字,所以一直增加到 (1+s)/2 。

    以求和为9的所有序列为例子:

     1 class Solution {
     2 public:
     3     vector<vector<int> > FindContinuousSequence(int sum) {
     4         vector<vector<int> > res;
     5         if(sum<3) return res;
     6         int small=1;
     7         int big=2;
     8         int middle = (sum+1)/2;
     9         int cursum = small + big;
    10         while(small<middle){
    11             if(cursum==sum) gettempvec(small,big,res);
    12             while(cursum>sum && small<middle){
    13                 cursum-=small;
    14                 small++;
    15                 if(cursum==sum) gettempvec(small,big,res);
    16             }
    17             big++;
    18             cursum+=big;
    19         }
    20         return res;
    21     }
    22     void gettempvec(int start,int end,vector<vector<int> > &res){
    23         vector<int> vec;
    24         for(int i=start;i<=end;i++){
    25             vec.push_back(i);
    26         }
    27         res.push_back(vec);
    28     }
    29 };
  • 相关阅读:
    蛤圈不能圈一切---逐梦蛤蛤圈
    Unix培训基础
    java培训基础
    数据库基础
    Python生成requirements.txt方法
    免费高质量代理IP
    lxml库的xpath的使用
    python自带GUI库tkinter教程,全网最全最好
    selenium博客
    Linux-Centos下selenium部署
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11195814.html
Copyright © 2011-2022 走看看