zoukankan      html  css  js  c++  java
  • 第四章 分治策略 4.1 最大子数组问题 (减治法,别人的,拿来看看)

    /**
         * 获得连续子数组的最大和
         * 
         * @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));
        }
  • 相关阅读:
    bootmgr is missing
    【转】ahci和IDE的区别
    win10系统故障代码:0xc000014c
    c++小数点后舍入
    关于类里再声明自身类实例的思考
    Java集合
    Python图片转字符画
    102. Binary Tree Level Order Traversal
    1041. Robot Bounded In Circle
    144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/3774948.html
Copyright © 2011-2022 走看看