题目

53. 最大子序和

题解





代码

/** * code53 */
public class code53 {

    public static int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            if (sum > 0) {
                sum += nums[i];
            } else if (sum <= 0) {
                sum = nums[i];
            }
            if (sum > ans) {
                ans = sum;
            }
        }
        return ans;
    }

    // public static int maxSubArray(int[] nums) {
    // int len = nums.length;
    // if (len == 0) {
    // return 0;
    // }
    // int dp[] = new int[len];
    // dp[0] = nums[0];

    // for (int i = 1; i < len; i++) {
    // if (dp[i - 1] >= 0) {
    // dp[i] = dp[i - 1] + nums[i];
    // } else {
    // dp[i] = nums[i];
    // }
    // }

    // int res = dp[0];
    // for (int i = 1; i < len; i++) {
    // if (dp[i] > res) {
    // res = dp[i];
    // }
    // }
    // return res;
    // }

    public static void main(String[] args) {
        int nums[] = { -2, 1, -3, 4, -1, 2, 1, -5, 4 };
        int res = maxSubArray(nums);
        System.out.println(res);
    }
}

参考

  1. 动态规划 + 分治法(Python 代码、Java 代码)
  2. 画解算法:53. 最大子序和
  3. Maximum Subarray (动态规划)
  4. 动态递归法和分治解决
  5. 动态规划求解最大子序和
  6. 最大子序和(暴力法 + 分治法 + DP)- Python3
  7. leetcode-最大子序和(四种)
  8. *LeetCode 53. 最大子序和
  9. 绝妙的算法——最大子序列和问题
  10. 『算法』最大子序列和的三种算法