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
.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
最大子段和问题,只写了O(N)的方法,分治方法下次写注意补上。注意此题与gas station那道题的区别。
维护一个sum数组,遍历到某个数A[i]时,考虑sum[i -1] + A[I]后是更大还是更小,如果更大则加,如果更小,就使sum[i] = 此数。然后用max记录sum数组中最大的那个数即可。
Source
public class Solution {
public int maxSubArray(int[] A) {
int len = A.length;
int max = A[0];
int[] sum = new int[len]; //***
sum[0] = A[0];
for(int i = 1; i < len; i++){
sum[i] = Math.max(sum[i - 1] + A[i], A[i]); //***
max = Math.max(max, sum[i]);
}
return max;
}
}
Test
public static void main(String[] args){
int[] A = {-2,1};
System.out.println(new Solution().maxSubArray(A));
}