intfindmax(vector<int> nums, int x, int y) { int v, L, R, midMaxs; if (y - x == 0) { return nums[x]; } int m = ( x + y ) / 2; //分治第一步,划分成[x,m)和[m,y)两部分 midMaxs = max(findmax(nums, x, m), findmax(nums, m + 1, y)); v = 0; L = nums[m]; R = nums[m+1]; for (int i = m ; i >= x; i--) { L = max(L, v += nums[i]); } v = 0; for (int i = m + 1 ; i <= y; i++) { R = max(R, v += nums[i]); } returnmax(L + R, midMaxs);
} intmaxSubArray(vector<int>& nums){
int length = nums.size(); int result = findmax(nums, 0, length-1); return result; }