有一个大小为n的数组序列,求该序列子序列的和值最大?
我用了大约三种方法实现,逐渐减少时间复杂度,分别用不同的命名 方式来区分他们,顺便打印了那个子区间的和值最大,
maxSum_1:用数组的方式实现三次遍历,求出所有子序列的和值,并且比较大小,求出最大子序列值
maxSum_2:用另一个数组来存储从下标0开始的所有和值,然后操作次此序列,用减的方式,来算出所有和值,并且比较大小然后,改变区间
maxSum_3: 采用分治法,用递归的方式,把序列分为三种情况,左序列存在和值最大,有序列存在和值最大,中间存在和值最大,然后两个中间和值相加,就是中间最大和值,然后这三种情况比较大小,得出最大子序列和值和区间。
#include<stdio.h>
int max, mi, mj;//定义为全局变量不用来回传
//复杂度为O(n^3)
void maxSum_1(int a[], int n) {
for (int i = 0;i < n; i++)
{
for (int j = i; j < n; j++)
{
int sum = 0;
//求和的
for (int k = i; k <= j; k++)
sum += a[k];
if (sum > max)
{
max = sum;
mi = i;
mj = j;
}
}
}
}
//O(n^2+n)
void maxSum_2(int a[],int s[],int n) {
int sum