求最大子列和

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Alan66阅读 226评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 1. 链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,...
    Mr希灵阅读 1,463评论 0 20
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,909评论 2 36
  • 你是不是曾和我一样,买了很多书,却只是翻了几页就束之高阁了。曾经我买过一本书,叫《易经》,买它的原因是有个朋友喜欢...
    海之眼阅读 228评论 0 1