编程之美 2.14 求数组的子数组之和的最大值

来源:互联网 发布:java回调函数的作用 编辑:程序博客网 时间:2024/06/06 08:42

用sum表示当前子数组的和,用Max表示子数组之和的最大值。

初始化:将sum和Max初始化为数组中的第一个元素的值。

思路:


遍历数组,依次判断数组中的每一个元素的值 将其与0作比较,如果其大于等于0,再判断之前子数组的和是否大于0,如果之前子数组的和小于0,则当前元素即为当前子数组之和。如果之前子数组之和大于0,则将当前元素与之前子数组之和相加,相加之和作为当前子数组之和。如果其小于0    判断Max是否大于等于0如果Max大于等于0则将当前元素与之前子数组之和相加,相加之和作为当前子数组之和,跳过循环如果Max小于0当前子数组之和即为当前元素将当前子数组之和与最大值Max作比较如果其大于最大值,则更新




------------------------------------------------------------------------------------------

因为只遍历了一次数组,所以时间复杂度为O(n)


代码如下:

#include <iostream>using namespace std;int main(){    int n, s[10], sum, Max;    cin >> n;    for(int i = 0; i < n; ++i)        cin >> s[i];    for(int i = 0; i < n; ++i)    {        if(i == 0)            Max = sum = s[i];   //将sum和Max初始化为数组中的第一个元素的值。        else        {            if(s[i] >= 0)            {                if(sum <= 0)                    sum = s[i];                else                    sum = sum + s[i];            }            else            {                if(Max >= 0)                {                    sum = 0;                    continue;                }                else                    sum = s[i];            }            if(sum > Max)                Max = sum;        }    }    cout << "max = " << Max << endl;    return 0;}



0 0
原创粉丝点击