给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
思路
还是去找递推关系式,我们需要记录当前子列的最大值,和比较原先的最大值,这两个操作放在一个for循环中就可以了,比如说记录当前子列的最大值为dp[i],那么dp[i]=max(nums[i],dp[i-1]+nums[i]),然后就是取最大值max(maxsum,dp[i])
下面给出源代码
#define max(a,b) a>b?a:b
int maxSubArray(int* nums, int numsSize) {
int i=0;
int * dp;
dp=(int *)malloc((numsSize)*sizeof(int));
dp[0]=nums[0];
int maxsum=nums[0];
for(i=1;i<numsSize;i++)
{
dp[i] = max(nums[i]+dp[i-1],nums[i]);
maxsum=max(maxsum,dp[i]);
}
return maxsum;
}