问题:
给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
我的解答:
/*DP:首先定义我们想要的(也就是最大值)初始值,然后多次迭代,每次迭代之后判断是否要更新目标值。“连续”要求要求相邻元素的和,
如果一个值累加它后面一个值之后变小了,那么这样的组合一定不是最大和的连续数组(啊啊,我也不知道怎么说。。。)*/
int maxSubArray(int* nums, int numsSize)
{
int sum = nums[0]; // 保存局部最大数,给个初始值,为nums[0]
int max = sum; // 保存和的最大值
for (int i = 1; i < numsSize; i++)
{
if (sum + nums[i] <= nums[i]) // 判断是否需要更新局部最大数
sum = nums[i];
else
sum = sum + nums[i];
if (sum > max) // 判断是否需要更新max
max = sum;
}
return max;
}