zoukankan      html  css  js  c++  java
  • 剑指offer系列23:连续子数组的最大和

    初次看到这个题的时候,我觉得很复杂,因为不知道所求的子数组的长度,而且里有负数增加了难度。看了答案之后发现竟然可以用这么简单的算法做出来,答案里说用的是贪心算法。

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 class Solution {
     5 public:
     6     int FindGreatestSumOfSubArray(vector<int> array) {
     7         if (array.empty())
     8             return 0;
     9         int sum = 0, maxsum = 0,maxnum=INT_MIN;
    10         for (int i = 0; i < array.size(); i++)
    11         {
    12             //sum = sum + array[i];
    13             sum += array[i];
    14             if (sum < 0)
    15                 sum = 0;
    16             else if (sum > maxsum)
    17                 maxsum = sum;
    18             if (array[i] > maxnum)
    19                 maxnum = array[i];
    20         }
    21         return (maxsum>0)?maxsum:maxnum;
    22     }
    23 };
    24 int main()
    25 {
    26     vector<int> test{ 1,-2,3,10,-4,7,2,-5 };
    27     Solution so;
    28     cout << so.FindGreatestSumOfSubArray(test) << endl;
    29     return 0;
    30 }

    剑指offer上说这个题也可以用动态规划的思路去做,但是代码是一样的。动态规划和贪心算法都是很常考的算法。

  • 相关阅读:
    iOS堆栈-内存-代码在据算机中的运行
    iOS self和super的区别
    php代码优化
    缓存雪崩现象解决方案
    缓存失效
    分布式memcache
    Linux下编译安装Memcache
    windows 下安装 php-memcached 扩展
    Linux下安装 php-memcache 扩展
    缓存之文件缓存
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11153288.html
Copyright © 2011-2022 走看看