JZ30-连续子数组的最大和

描述
输入一个长度为n的整型数组a,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
示例1
输入:[1,-2,3,10,-4,7,2,-5]
返回值:18
说明:输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和 18。
思路:
采用的是动态规划的思路。

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

忘记了看Leetcode的图文讲解:

https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/solution/mian-shi-ti-42-lian-xu-zi-shu-zu-de-zui-da-he-do-2/
上一篇:数字三角形—动态规划


下一篇:算法第三章实践报告