美文网首页
求连续子数组的最大和

求连续子数组的最大和

作者: 联想桥南 | 来源:发表于2017-11-16 22:44 被阅读0次

    leetcode 53题

    解题思路动态规划问题。给出数组array[ ],假定 f(i)代表array数组中以array[ i ]元素结尾的子数组的最大和,则可推得动态转换方程为

    f(i) = f(i - 1) > 0 ? f(i - 1) + array[ i ] : array[ i ]
    

    穷举所有的f( i ),返回最大的一个。

    实现代码:

    package com.lxqn.jiapeng.leetcode;
    
    /**
     * leetcode 53
     * Created by jiapeng on 2017/11/16.
     */
    public class MaxSumSubArray {
    
        public static void main(String[] args) {
            int[] array = {-1,2,3,-6,2,3,-1,2};
            findMaxSumSubArray(array);
        }
    
        public static void findMaxSumSubArray(int[] array){
    //        f(i) = f(i - 1) > 0 ? f(i - 1) + array[ i ] : array[ i ]
            int length = array.length;
            //动态规划的关键,动态方程式的定义确认
            //dp[i]表示以array[i]结尾的,最大子数组和
            int[] dp = new int[length];
    
            dp[0] = array[0];
            int maxSum = array[0];
            for (int i= 1;i<length; i++){
                dp[i] = dp[i-1] > 0 ? dp[i-1] + array[i] : array[i];
                maxSum = Math.max(dp[i],maxSum);
            }
            System.out.println("maxSum="+maxSum+ " ");
    //
        }
    
    }
    

    相关文章

      网友评论

          本文标题:求连续子数组的最大和

          本文链接:https://www.haomeiwen.com/subject/poarvxtx.html