题目:返回一个整数数组中最大子数组的和。
(要求:输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。)
1.设计思想:要求出一个正负数组中的最大子数组的和,可以先找出其中的所有非负数,它们的和则是最终要求的数值。
所以就要利用for循环生成一个随机数组,数值为-100到100之间的整数,然后用一个if语句判断随机数是否是非负数,如果是就 在sum的 值上加上这个数,最后得到的数组之和就是要找的值。
2.源代码:
#include <iostream> #include <time.h> using namespace std; void main() { int arr[200]; int sum = 0; srand((unsigned)time(NULL)); cout << "生成的数组为:"<< endl; for (int i = 0;i < 200; i++) { arr[i] = rand()%201-100;//生成一个随机数组 cout << arr[i] << " "; if (arr[i] >= 0)//找出所有非负数将其相加 { sum = sum + arr[i]; cout << arr[i]; } } cout << endl; cout << "该数组的子数组和的最大值为:" << sum << endl; }
3.测试结果:
4.项目计划总结表: