【剑指offer-JZ42】连续子数组的最大和

73 阅读1分钟

该题目思路:dp[i]表示以元素array[i]结尾的最大连续子数组和。

以[-2,-3,4,-1,-2,1,5,-3]为例,可以发现:

  • dp[0] = -2
  • dp[1] = -3
  • dp[2] = 4
  • dp[3] = 3

以此类推,会发现:

  • dp[i] = max{dp[i-1]+array[i],array[i]}.
public class Solution {
    public static int FindGreatestSumOfSubArray(int[] array) {
        int ans = array[0];
        int tmp = array[0];
        for (int i = 1; i < array.length; i++) {
            tmp = Math.max(array[i], tmp + array[i]);
            ans = Math.max(ans, tmp);   // 更新一下答案,不属于动态规划中的步骤
        }
        return ans;
    }


    public static void main(String[] args) {
        int[] a = {1, -2, 3, 10, -4, 7, 2, -5};
        System.out.println(FindGreatestSumOfSubArray(a));
    }
}


题源:www.nowcoder.com/practice/45…