题目大意:在一个给定的数组中找到一个连续子数组,该子数组的和最大。
理解:在一个整型数组中找到一个和最大的子数组,返回此最大和。本方法采用curSum来记录目前的最大值,maxSum记录查找过程中的最大值。时间复杂度为O(n)。
实现:
public class Solution {
public int maxSubArray(int[] A) {
if(A == null || A.length == 0) return 0;
int len = A.length;
int curSum = A[0];
int maxSum = A[0];
for(int i = 1; i < len; i ++) {
if(curSum < 0) {
curSum = 0;
}
curSum += A[i];
if(maxSum < curSum) {
maxSum = curSum;
}
}
return maxSum;
}
}
给定数组:[-2,1,-3,4,-1,2,1,-5,4],相邻最大和子数组为[4,-1,2,1],返回6。
另:另外还有一种分治方法,待研究。