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
.
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
This is a Classical DP problem:
Goal: to find optimize solution which is Maximum Subarray
Idea: optimize local and optimize global method
Assume if local[i] and global[i] is optimal solution so far.
how about [i+1] optimal solution =>
then we have, local[i+1]=Max(local[i]+A[i],A[i]);
Therefore, global[i+1]=Max(local[i+1],global[i]);
Time Complexity: O(n)
Space: O(1)
public class Solution {
public int maxSubArray(int[] A) {
if(A.length==0) return 0;
int local=A[0];
int global=A[0];
for(int i=1;i<A.length;i++){
//local optimize
local=Math.max(A[i],local+A[i]);
global=Math.max(local,global);
}
return global;
}
}