431
社区成员
发帖
与我相关
我的任务
分享
int MaxSum(int *a, int left, int right){
int sum = 0;//最大子和段
if (left == right)//处理序列长度为一的情况
sum = a[left] > 0 ? a[left] : 0;
int s1 = 0;
int lefts = 0;
for (int i = mid;i >= left;i--){
lefts += a[i];
if (lefts > s1){
s1 =lefts;
}
}
int s2 = 0;//记录右段最大子和段
int rights = 0;
for (int i = mid + 1; i <= right; i++){
rights += a[i];
if (rights > s2){
s2 = rights;
}
}
sum = s1 + s2;//确定最大字段和
if (sum < leftsum)
sum = leftsum;
if (sum < rightsum)
sum = rightsum;
}
O(nlogn)
通过本章的学习,我明白了分治法的基本内涵就是“把复杂的问题简单化”,分治法就是将一个大问题分解成若干个子问题进行求解,在这过程可以用到函数的递归求解,也可以不用递归求解。分治法思想对于解决现代计算机甚至生活方面的问题都极其重要,将一个大的问题拆解成小问题,如汉诺塔、归并排序等。