首先看到最大和,然后观察是求上面的最大值,一看连续子数组
这时候脑子里面应该会有很多idea
首先,既然是连续的子数组那如果都是正数的话,
因为数组中有正有负有0,因此每次遇到一个数,要不要将其加入我们所求的连续子数组里面,是个问题,有可能加入了会更大,有可能加入了会更小,而且我们要求连续的最大值,因此这类有状态转移的问题可以考虑动态规划。
从数组的开头往下走,sum记录连续的和,max记录最大值
sum和max的初始值为数组第一个元素array[0]
数组不断往下走,不断更新max的值。如果当sum<array[0]时,此时就需要丢弃之前统计的,所以令sum=0
import java.util.*;
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        //记录到下标i为止的最大连续子数组和
        int[] dp = new int[array.length]; 
        dp[0] = array[0];
        int maxsum = dp[0];
        for(int i = 1; i < array.length; i++){
            //状态转移:连续子数组和最大值
            dp[i] = Math.max(dp[i - 1] + array[i], array[i]); 
            //维护最大值
            maxsum = Math.max(maxsum, dp[i]); 
        }
        return maxsum;
    }
}