首页 > 其他 > 详细

第四章 分治策略 4.1 最大子数组问题 (减治法,别人的,拿来看看)

时间:2014-06-07 21:22:02      阅读:393      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
/**
     * 获得连续子数组的最大和
     * 
     * @author dfeng
     * 
     */

    private static long getMax(long a, long b) {
        return a > b ? a : b;
    }

    /**
     * 获得连续子数组的最大和
     * 
     * @param array
     * @return 最大和,此处用了Long型是为了表示当参数为null或空时,可以返回null,返回其它任何数字都可能引起歧义。
     */
    public static Long getMax(int[] array) {

        if (array == null || array.length <= 0) {
            return null;
        }

        long maxSum = array[0]; // 所有子数组中最大的和
        long righteEdge = array[0]; // 右侧子数组的最大和
        for (int i = 1; i < array.length; i++) {
            // 当右侧子数组的最大和为负数时,对于新数组,右侧子数组的最大和为新增加的数。
            if (righteEdge < 0) {
                righteEdge = array[i];
            } else { // 为正数时,对于新数组,右侧子数组的最大和为新增加的数 + 原来的最大和。
                righteEdge += array[i];
            }
            // 所有子数组中最大的和
            maxSum = getMax(righteEdge, maxSum);
        }
        return maxSum;
    }

    public static void main(String[] args) {
        int[] array = { -111, -2, -3, -10, -4, -7, -2, -5 };
        System.out.println("Max sum: " + getMax(array));
    }
bubuko.com,布布扣

第四章 分治策略 4.1 最大子数组问题 (减治法,别人的,拿来看看),布布扣,bubuko.com

第四章 分治策略 4.1 最大子数组问题 (减治法,别人的,拿来看看)

原文:http://www.cnblogs.com/xiaojintao/p/3774948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!