最大子序列求和_最大连续子序列求和详解

这篇博客详细介绍了如何求解整数序列的最大连续子序列求和问题,包括算法一(立方时间复杂度),算法二(平方时间复杂度),算法三(对数时间复杂度)和算法四(线性时间复杂度)。每个算法都有代码描述和性能分析,其中算法四是性能最优的解决方案,其运行时间为O(N)。
摘要由CSDN通过智能技术生成

Maximum Continuous Subsequence Sum

最大连续子序列求和详解

1.        问题描述

输入一个整数序列(浮点数序列也适合本处讲的算法),求出其中连续子序列求和的最大值。

2.        算法分析

2.1.        算法一

2.1.1.       算法描述

遍历所有子序列并求和,比较得出其中的最大值。

2.1.2.       代码描述

1          public static int maxSubSumCubic(int[] array) {

2          int maxSum = 0;  //最大子序列求和

3          //start表示要求和的子序列的开始索引,end表示结束索引

4          for(int start = 0; start < array.length; start++) {

5          for(int end = start; end < array.length; end++) {

6          int thisSum = 0;   //当前子序列求和

7          //求出array[start]~array[end]子序列的和

8          for(int index = start; index <= end; index++) {

9          thisSum += array[index];

10      }

11      //判断是否大于之前得到的最大子序列求和

12      if(thisSum > maxSum) {

13      maxSum = thisSum;

14      }

15      }

16      }

17      return maxSum;

18      }

2.1.3.       算法分析

设输入序列长度为N,算法一有三个循环嵌套,第4行的循环长度为N。第5行的循环长度为N-start+1,因为我们考虑的是最差性能,所以可取为最大的N。第8行的循环长度是end-start+1,同理可取为N。所以可得算法的运行时间是O(N*N*N)=O(N^3 ),即算法的运行时间是以输入长度的立方增长的。可想而知,一旦输入长度变大,算法的运行效率将慢得无法接受,这也从反面说明了算法设计的重要性。

2.2.        算法二

2.2.1.       算法描述

算法设计的一个重要原则就是“不要重复做事”。在算法一中,对array[start]~array[end]子序列求和,可以由上一次求和array[start]~array[end-1]的结果加上array[end]得到,而不用从头开始计算。

2.2.2.       代码描述

1          public static int maxSubSumQuad

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值