问题描述:
计算一个给定数组的最大子序列之和
分析:
有三种方法:
1,扫描3遍,可以计算所有的子序列之和,但是复杂度为N^3。
2,扫描2遍,计算以任意元素开始的和,如果大于当前的最大值则将最大值付给它,复杂度为N^2。
3,扫描一遍,计算任意元素开始的值,如果小于零则清零,否则继续往后加。
代码实现:
package c02; /** * @project: DataStructureAndAlgorithmAnalysis * @filename: MaxSubSum * @version: 0.10 * @author: Jimmy Han * @date: 21:35 2015/7/7 * @comment: 以每一个元素为起点计算往后的和,如果为负,则重新开始计算 * @result: 10 */ public class MaxSubSum { public static void main(String[] args){ int[] arr = {-1, 3, 2, -3, -1, 4, 5}; System.out.println(maxSubSum(arr)); } public static int maxSubSum( int[] a){ int maxSum = 0, thisSum = 0; for(int j = 0; j < a.length; j++){ thisSum += a[j]; if(thisSum > maxSum) maxSum = thisSum; else if(thisSum < 0) thisSum = 0; } return maxSum; } }
时间: 2024-10-09 00:05:38