首页 > 技术文章 > 数据结构MOOC(陈越等)习题总结(一)最大子列和

L2021111 2021-07-04 21:35 原文

算法的优化过程:

        ①算出所有连续子列和,再从中找出最大值。  

        ②对求所有连续子列和的过程进行优化:假定ThisSum是从A[i]到A[j]的子列和,那么对于相同的i,不同的j,只要在j-1次循环求和的基础上累加上A[j]即可。

            具体实现方法:在①步骤的基础上,去除第三重循环并改变ThisSum归零的位置。

        ③"分而治之":将数组从中间一分为二,递归地求左边数组的最大子列和以及右边数组的最大子列和,还需要求跨越边界的最大子列和。

        ④"在线处理":

int MaxSubseqsum(int A[],int N)
{
  int ThisSum,MaxSum,i;
  ThisSum=MaxSum=0;
  for(i=0;i<N;i++)
{
  ThisSum=ThisSum+A[i];
  if(ThisSum>MaxSum)
  MaxSum=ThisSum;//发现更大和的时候进行更新
  else if(ThisSum<0)
  ThisSum=0;//如果当前和为负数,不可能让后面的部分和增大,所以舍弃。
} 
return MaxSum;
}

 

推荐阅读