解题思路
代码
// class Solution {
// public:
// int crossSum(vector<int> & nums, int left, int right, int p)
// {
// if(left == right) return nums[left];
// int currSum = 0, leftSum = INT_MIN, rightSum = INT_MIN;
// for(int i = p ; i > left-1 ; i--)
// {
// currSum += nums[i];
// leftSum = max(currSum, leftSum);
// }
// currSum = 0;
// for(int i = p + 1 ; i < right + 1 ; i++)
// {
// currSum += nums[i];
// rightSum = max(currSum, rightSum);
// }
// return leftSum + rightSum;
// }
// int unitSum(vector<int> & nums, int left, int right)
// {
// if(left == right)
// {
// return nums[left];
// }
// int leftSum;
// int rightSum;
// int RcrossSum;
// leftSum = unitSum(nums, left, (left+right)/2);
// rightSum = unitSum(nums, (left+right)/2+1, right);
// RcrossSum = crossSum(nums, left, right, (left+right)/2);
// return max(leftSum, max(rightSum, RcrossSum));
// }
// int maxSubArray(vector<int>& nums) {
// return unitSum(nums, 0, nums.size()-1);
// }
// };
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int currMax = nums[0];
int reMax = nums[0];
for(int i = 1 ; i < nums.size() ; i++)
{
currMax = max(nums[i], currMax + nums[i]);
reMax = max(currMax, reMax);
}
return reMax;
}
};