LeetCode.53:Maximum Subarray【DP】

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

思路:简单的一维动态规划,dp[i] 是前i个数字中 累加和最小的 子串的累加和

package com.Ryan;

public class MaximumSubarray {

	public static void main(String[] args) {
		int a[] = {-2,1,-3,4,-1,2,1,-5,4};
		MaximumSubarray maximumSubarray=new MaximumSubarray();
		System.out.println(maximumSubarray.maxSubArray(a));
	}
	 public int maxSubArray(int[] nums) {
		 int[] dp = new int[nums.length];
	        dp[0] = nums[0];
	        int max = dp[0];
	        for(int i = 0; i < nums.length; i++){
	                dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
	                max = Math.max(max,dp[i]);
	        }
	        return max;
	  }
}

猜你喜欢

转载自blog.csdn.net/qq_32350719/article/details/89493293