给定一个有n(n≥1)个整数的序列,求出其中最大连续子序列的和并列出组成项。
例如序列(-2,11,-4,13,-5,-2 )的最大连续子序列和为20,
序列(-6,2,4,-7,,5,3,2,-1,6,-9,10,-2)的最大子序列和为16,规
定一个序列的最大连续子序列和至少是0,如果小于0,如果小于0,其结果为0.
#include <iostream>
using namespace std;
int maxSubSum1(int a[], int n)
{
int i, j, k;
int maxSum = 0, thisSum;
for (i = 0; i < n; i++)
{
for (j = i; j < n; j++)
{
thisSum = 0;
for (k = i; k <= j; k++)
thisSum += a[k];
if (thisSum > maxSum)
maxSum = thisSum;
}
}
return maxSum;
}
int main()
{
int n;
cout << "Enter the size of the array: ";
cin >> n;
int arr[n];
cout << "Enter the elements of the array:\n";
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
int maxSum = maxSubSum1(arr, n);
cout << "Maximum subarray sum: " << maxSum << endl;
return 0;
}
该函数使用了三重循环,时间复杂度为O(n^3)。
该算法的缺点是时间复杂度较高,当数组规模较大时,性能较差。可以考虑使用更有效的算法进行优化,例如动态规划算法或分治算法