码迷,mamicode.com
首页 > 编程语言 > 详细

计算数组的最大子序列之和

时间:2015-07-07 23:04:23      阅读:446      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:

计算一个给定数组的最大子序列之和


分析:

有三种方法:

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;
    }
}


计算数组的最大子序列之和

标签:

原文地址:http://my.oschina.net/jimmyhan/blog/475838

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!