Given an integer array nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
考察:最大连续字段和
Method 1.
class Solution {
public:
int maxSubArray(vector& nums) {
int res = INT_MIN, curSum = 0;
for (int i = 0; i < nums.size(); i ++) {
curSum = max(nums[i], curSum+nums[i]);
res = max(res, curSum);
}
return res;
}
};
Method 2.
class Solution {
public:
int maxSubArray(vector& nums) {
if (nums.empty())
return 0;
return helper(nums, 0, nums.size()-1);
}
int helper(vector& nums, int left, int right) {
if (left >= right)
return nums[left];
int mid = (left + right) / 2;
int lmax = helper(nums, left, mid-1);
int rmax = helper(nums, mid+1, right);
int mmax = nums[mid], t = mmax;
for (int i = mid-1; i >= left; i --) {
t += nums[i];
mmax = max(mmax, t);
}
t = mmax;
for (int i = mid+1; i <= right; i ++) {
t += nums[i];
mmax = max(mmax, t);
}
return max(mmax, max(lmax, rmax));
}
};