题目:
返回一个整数数组中最大子数组的和
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为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; } }
结果截图:
总结:这道题是老师在课堂上讲解的一道题,很考验算法,对于不懂算法的来说有一点=定的难度