【ATT】Maximum Subarray
Q: 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.
找到连续的子数组,使得和最大。
A: 典型的动态规划。
f(i):以i结尾的子数组最大和. 定义成1~i之间最大和,是不对的,因为题目要求连续的最大子数组。
f(i) = f(i-1) + arr[i]; f(i-1)>0
= arr[i]; f(i-1)<=0
max = max{f(i)}
int maxSubArray(int A[], int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n==0)
return INT_MIN;
int sum = A[0];
int max = sum;
for(int i=1;i<n;i++)
{
if(sum<=0)
sum = A[i];
else
sum = sum + A[i];
if(sum>max)
max = sum;
}
return max;
}
浙公网安备 33010602011771号