给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
int maxSubArray(int* nums, int numsSize){
if(numsSize ==1)
return nums[0];
if(numsSize == 0)
return 0;
int result = INT_MIN;//设立一个足够小的数
int count = 0;
for (int i = 0; i < numsSize; i++) {//遍历一次
count += nums[i];
if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)
result = count;// 保存当前数组中连续最大值
}
if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和 遇到负数 使count 至为零 重新统计
}
return result;
}
二
int maxSubArray(int* nums, int numsSize){
int sum = nums[0];
int max = nums[0];
for(int i = 1; i < numsSize; i++)
{
if(nums[i] > sum + nums[i]) //之前的 拉低总和
sum = nums[i];
else sum = sum + nums[i]; // 拉高总和 保存
if(sum > max)
max = sum; //保存最大值
}
return max;
}