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
.
最大子序列
class Solution { public: int maxSubArray(int A[], int n) { int sum = INT_MIN; int temp = 0; for(int i=0;i<n;i++) { if(temp>0) temp += A[i]; else temp = A[i]; if(temp>sum) sum = temp; } return sum; } };
含义:从元素i开始,到元素j为止的所有的元素构成的子段有多个,这些子段中的子段和最大的那个。
那么:
如果:b[j-1]>0, 那么b[j]=b[j-1]+a[j]
如果:b[j-1]<=0,那么b[j]=a[j]
这样,显然,我们要求的最大子段和,是b[j]数组中最大的那个元素。