Leetcode-Maximum Subarray

LiBlog發表於2014-11-27

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

Analysis:

We define the state d[i] as the the largest sum we can get for subarrays the end at i. We then have the formula:

if d[i-1]<0, then we will choose to just select A[i] at i, d[i]=A[i]; otherwise d[i]=A[i]+d[i-1];

Solution:

 1 public class Solution {
 2     public int maxSubArray(int[] A) {
 3         int len = A.length;
 4         if (len==0) return 0;
 5         int[] d = new int[len];
 6         d[0] = A[0];
 7         int max = d[0];
 8         for (int i=1;i<len;i++){
 9             if (d[i-1]<0)
10                 d[i]=A[i];
11             else 
12                 d[i]=A[i]+d[i-1];
13             if (d[i]>max) max = d[i];
14         }
15 
16         return max;
17     }
18 }