• 剑指offer系列33:和为S的两个数字VS何为S的连续正数


    第一个题,我想到的思路是一个个找的方法。看书上是设置两个指针然后两个指针一起走。确实这种时间复杂度更低。本来我看到有多组输出乘积最小的我还写了一个专门判断哪一对乘积最小的代码。看到别人证明说找到的第一对就是最小的,所以就没放。我发现这种使用两个指针从两端走的题目真的很多,以后遇见题可以往这方面考虑。

     1 class Solution {
     2 public:
     3     vector<int> FindNumbersWithSum(vector<int> array, int sum)
     4     {
     5         vector<int> re;
     6         if (array.empty() || sum == 0)
     7             return re;
     8         for (auto b = array.begin(), e = array.end() - 1; b< e;)
     9         {
    10             if (*b + *e == sum)
    11             {
    12                 re.push_back(*b);
    13                 re.push_back(*e);
    14                 break;
    15             }
    16             else {
    17                 if (*b + *e < sum)
    18                     ++b;
    19                 else
    20                     --e;
    21             }
    22         }
    23         return re;
    24     }
    25 };

    第二个题,取连续的正数序列和为S。去两个数分别为small和big代表所取的序列的两端。开始设置为small=1,big=2。对序列内的数字求和,如果等于S就放进vector,如果小于s,求将big++,增加一个数字。如果大于S,就small++,删掉一个小的数字。

     1 class Solution 
     2 {
     3 public:
     4     vector<vector<int> > FindContinuousSequence(int sum) 
     5     {
     6         vector<vector<int> > re;
     7         if (sum <= 0)
     8             return re;
     9 
    10         for (int i = 1, j = 2; j <= sum / 2 + 1;)
    11         {
    12             int s = 0;
    13             for (int k = i; k <= j; k++)
    14                 s = s + k;
    15             if (s == sum)
    16             {
    17                 vector<int> tem;
    18                 for (int k = i; k <= j; k++)
    19                     tem.push_back(k);
    20                 re.push_back(tem);
    21                 j++;//记住在for循环里无论哪一种情况都要对变量更新
    22             }
    23             else
    24             {
    25                 if (s < sum)
    26                 {
    27                     j++;
    28                 }
    29                 else
    30                 {
    31                     i++;
    32                 }
    33             }
    34         }
    35         return re;
    36     }
    37 };
  • 相关阅读:
    CSS布局设计
    Gulp自动化构建工具的简单使用
    雅虎前端优化的35条军规
    CSS预编译器less简单用法
    java 数据相除
    idea 配置文件中文显示问题
    postgresql 表触发器
    postgresql 自定义函数
    postgresql 自定义聚合函数
    CentOS 6.5 yum安装mysql5.6或其他版本【默认yum只能安装mysql 5.1】 by jason
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11208595.html
Copyright © 2020-2023  润新知