我在网上看了陈越老师的数据结构,很棒,讲了分而治之算法,原理我已经懂了,代码网上也有,但是有一个疑惑,就是中间跨越部分最大的子列和为iRightMaxSum + iLeftMaxSum,但是很明显这个iRightMaxSum + iLeftMaxSum是不对。如下图举例。
如图,左边最大为6,右边最大为8,而中间跨越最大为11<(6+8)。故这个iRightMaxSum + iLeftMaxSum不对。
代码如下:
#include<stdio.h>
#include<iostream>
#define MAXN 100000
int arr[MAXN + 10];
int maxThree(int a,int b,int c);
int maxSubSeq(int arr[],int low,int height);
int maxSubSeq1(int arr[],int n);
int main()
{
int i, n;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
printf("%d\n", maxSubSeq(arr, 0, n-1));
system("pause");
return 0;
}
int maxSubSeq1(int arr[],int n)
{
int i = 0, iThisSum = 0, iMaxSum = 0;
f