输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值,要求时间复杂度为O(n)。
#define SIZE 8
#define COLUMN 4
void MaxSumSubArray(int* arr) {
int curSum = 0;
int maxSum = arr[0];
int maxBegin = 0;
int maxEnd = 0;
int tmpBegin = 0;
//找出最大值
for (int i = 0; i < SIZE; ++i) {
curSum = curSum + arr[i] > arr[i] ? curSum + arr[i] : arr[i];
if (curSum == arr[i]) {
tmpBegin = i;
}
maxSum = curSum > maxSum ? curSum : maxSum;
if (curSum == maxSum) {
if (tmpBegin != maxBegin) {
maxBegin = tmpBegin;
}
maxEnd = i;
}
}
cout << "maxBegin:" << maxBegin << ", maxEnd:" << maxEnd << endl;
cout << "MaxSubArray:" << endl;
for (int i = maxBegin; i <= maxEnd; ++i) {
cout << " " << arr[i];
}
cout << endl << "maxSum:" << maxSum << endl;
}