<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Question:</span>
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
.
Answer:
--Thought 1: divide to left and right part, compare largest subarray of left, subarray of right part and the cross-over of left and right subs. In recursive way
--Thought 2: DP
public class Solution {
public int maxSubArray(int[] A) {
if(A.length == 0) return 0;
if(A.length == 1) return A[0];
int[] sum = new int[A.length];
sum[0] = A[0];
for(int i=1; i<A.length; i++){
sum[i] = Math.max(sum[i-1] + A[i], A[i]);
}
Arrays.sort(sum);
return sum[A.length-1];
}
}