个人作业1—数组

题目:

返回一个整数数组中最大子数组的和

要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。
 
设计思想:假设第二个是最大值,从第二个元素开始循环,加上其前一个元素,判断是否大于当前数(即前一个元素是否是正数),当和大于最大值时,重置最大值为和
 
源代码:
#include<iostream>
using namespace std;

int  max(int a, int  b)
{
    return a>b ? a : b;
}

int main()
{

    int a[100], i, n;
    cout << "请输入数组长度:" << endl;
    cin >> n;
    cout << "请输入数组元素:" << endl;
    for (i = 1; i <= n; i++)
        cin >> a[i];
for (i = 2; i <= n; i++) { if (a[i] + a[i - 1]>a[i]) a[i] = a[i] + a[i - 1]; } int result = -100000; for (i = 1; i <= n; i++) result = max(result, a[i]); cout << result << endl; return 0; } }
结果截图:
 
 
总结:这道题是老师在课堂上讲解的一道题,很考验算法,对于不懂算法的来说有一点=定的难度
原文地址:https://www.cnblogs.com/ywqtro/p/12377046.html