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

posted @ 2019-07-08 19:36  妮妮熊  阅读(97)  评论(0编辑  收藏  举报