leetcode 53
53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
#define max(a,b) ((a)>(b)?(a):(b))
int maxSubArray_div(int* nums,int low,int high){if(low==high){return nums[low];}int mid=(low+high)/2;int left_max=maxSubArray_div(nums,low,mid);int right_max=maxSubArray_div(nums,mid+1,high);// int lr_max=nums[mid]+nums[mid+1];int l_max=nums[mid],l_tmp=nums[mid];for(int i=mid-1;i>=low;--i){l_tmp+=nums[i];l_max=max(l_max,l_tmp);}int r_max=nums[mid+1],r_tmp=nums[mid+1];for(int i=mid+2;i<=high;++i){r_tmp+=nums[i];r_max=max(r_max,r_tmp);}return max(max(left_max,right_max),r_max+l_max);
}
int maxSubArray(int* nums, int numsSize) {return maxSubArray_div(nums,0,numsSize-1);
}