求最大子列和

作者: MentallyL | 来源:发表于2017-05-03 00:10 被阅读4次
Paste_Image.png

第一种:最简单的解法:把所有子列都算一遍找到最大的

int MaxSubseqSum2( int A[], int N )  
{   int ThisSum, MaxSum = 0;
  int i, j;
  for( i = 0; i < N; i++ ) { /* i是子列左端位置 */
        ThisSum = 0;  /* ThisSum是从A[i]到A[j]的子列和 */
        for( j = i; j < N; j++ ) { /* j是子列右端位置 */
                ThisSum += A[j];        /*对于相同的i,不同的j,只要在j-1次循环的基础上累加1项即可*/ 
                if( ThisSum > MaxSum ) /* 如果刚得到的这个子列和更大 */
                          MaxSum = ThisSum;    /* 则更新结果 */
        } /* j循环结束 */    
   } /* i循环结束 */    
   return MaxSum;  
}

第二种:采用分治法,运用递归来解决。(使用了分治一般O(N2)的时间复杂度一般都会降到O(Nlog(N)))

Paste_Image.png

第三种:根据问题的特殊性可知,如果一直加正数,总数会一直变大。除非加到负数才会变小。

Paste_Image.png

这种时间复杂度显而易见是:(O(N))

每种处理算法的执行时间的比较:

Paste_Image.png

相关文章

  • 求最大子列和

  • 求最大子列和

    第一种:最简单的解法:把所有子列都算一遍找到最大的 第二种:采用分治法,运用递归来解决。(使用了分治一般O(N2)...

  • 求最大子列和算法

  • 求最大子列和问题 分治法

    分治法思想: 递归计算前半部分的最大子列和,递归计算后半部分的最大子列和,然后计算跨前后两个区域的最大子列和,这三...

  • 最大子序列解析

    最大子列和问题 给定N个整数的序列{A1, A2 ... An},求函数 f(i, j) = max{0, 从i到...

  • 动态规划

    求最大子数组,最大子乘积

  • 求最大子列和问题 优化算法

    先看一下前面的传统算法: 时间复杂度为:T(N)=O(N^3),显然该算法虽然简单易懂,但是时间复杂度太高。 分析...

  • 最大子列和问题的4种复杂度算法

    定义:给定个整数的序列 ,求函数 的最大值(若最大子列和为负数,则返回0)。 算法1——int MaxSubSeq...

  • 最大连续子列和问题(2)

    作为之前问题的升级版,我们现在不仅需要求出最大子列和,而且需要返回该结果的起始和结束下标,因为最大子列和结果不唯一...

  • Leetcode-Medium 152. Maximum Pro

    题目描述 给定一个整数数组nums(有正有负),求最大子数组乘积 思路 求最大子数组乘积问题是求最大子数组之和演变...

网友评论

    本文标题:求最大子列和

    本文链接:https://www.haomeiwen.com/subject/imueattx.html