#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <ctime>
#define LEN 10
typedef int* intp;
typedef int** intpp;
using namespace std;
intp randArray(int num)
{
srand((int)time(NULL));
intp arr = new int[num];
for (int i = 0; i < num; i++) {
arr[i] = rand() % 10 - 5;
}
return arr;
}
int getMaxSubArray_1(intp arr, int low, int high)
{
int n = high - low + 1;
int Sum = 0;
int maxSum = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
Sum += arr[j];
maxSum = max(Sum, maxSum);
}
Sum = 0;
}
return maxSum;
}
int getMaxSubArray_2(intp arr, int low, int high)
{
int n = high - low + 1;
int Sum = arr[low];
int maxSum = 0;
for (int i = low + 1; i < n; i++)
{
if (Sum > 0) {
Sum += arr[i];
}
else {
Sum = arr[i];
}
maxSum = max(Sum, maxSum);
}
return maxSum;
}
intp getMaxSubArray_3(intp arr, int low, int high)
{
int n = high - low + 1;
int Sum = arr[low];
int subArr[3];
memset(subArr, 0, sizeof(subArr));
for (int i = low + 1; i < n; i++)
{
if (Sum > 0) {
Sum += arr[i];
}
else {
Sum = arr[i];
subArr[1] = i;
}
if (Sum > subArr[0]) {
subArr[0] = Sum;
subArr[2] = i;
}
}
return subArr;
}
int main()
{
intp arr = randArray(LEN);
cout << "数组:";
for (int i = 0; i < LEN; i++)
cout << arr[i] << " ";
cout << endl;
intp res = getMaxSubArray_3(arr, 0, LEN - 1);
cout << "最大子段和:" << res[0] << "\n子段起点:" << res[1] << " 子段终点:" << res[2] << endl;
system("pause");
return 0;
}