首页 > 编程语言 > 详细

剑指Offer:连续子数组的最大和

时间:2020-06-09 10:12:58      阅读:36      评论:0      收藏:0      [点我收藏+]

剑指Offer:连续子数组的最大和

题目描述

  输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个数组。求所拥有子数组的和的最大值。要求时间复杂度为O(n)

题目分析

  我们可以用动态规划的思想来解决这个问题。以函数f(i)表示以第i个数字结尾的子数组的最大和,那么我们需要求出max[f(i)],其中0<=i<=n。我们可用如下递归公式求f(i):

  技术分享图片

  简单说明一下动态规划的思想:以第i-1个数结尾的最大和是多少,如果f(i-1)为负数,则与pData[i]相加,结果一定小于pData[i],所以直接取pData[i],否则加起来得到以第i个数字结尾的子数组的最大和

Java题解

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int[] dp = new int[array.length];
        dp[0] = array[0];
        int max = Integer.MIN_VALUE;
        for(int i=1;i<array.length;i++){
            if(array[i]+dp[i-1]<array[i])
                dp[i] = array[i];
            else
                dp[i] = array[i] + dp[i-1];
            if(dp[i]>max)
                max = dp[i];
        }
        return max;
    }
}

  

 

剑指Offer:连续子数组的最大和

原文:https://www.cnblogs.com/MrSaver/p/13070609.html

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