Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
[-2,1,-3,4,-1,2,1,-5,4]
,
[4,-1,2,1]
has the largest sum = 6
.
代码如下:
class Solution {
public:
int maxSubArray(vector& nums) {
int n = nums.size();
if (n==0)
return 0;
if (n == 1)
return nums[0];
return maxSubArray(nums, 0, n - 1);
}
int maxSubArray(vector& nums, int start, int end)
{
if (start > end)
return INT_MIN;
int n = end-start+1;
if (n == 1)
return nums[start];
int mid = (start+end)>>1;
//分成两部分:0.....mid | mid+1......n-1
int answer = max(maxSubArray(nums,start,mid-1), maxSubArray(nums,mid+1,end));
int now = nums[mid], may = now;
for (int i = mid - 1;i >= 0; i--)
{
may = max(may, now += nums[i]);
}
now = may;
for (int i = mid+1;i <= end;i++)
{
may = max(may, now +=nums[i]);
}
return max(answer, may);
}
};
class Solution {
public:
int maxSubArray(vector& nums) {
int n=nums.size();
vector dp(n);
dp[0]=nums[0];
int answer = dp[0];
for(int i=1; i
class Solution {
public:
int maxSubArray(vector& nums) {
int n=nums.size();
int endHere = nums[0];
int answer = nums[0];
for(int i=1; i
class Solution {
public:
int maxSubArray(vector& nums) {
int n=nums.size();
int sum = nums[0];
int minSum = min(sum,0);
int answer = nums[0];
for(int i=1; i
设置一个变量subSum记录nums[i]之前子数组和,最大子数组记为sum
当subSum<=0时,subSum+nums[i]<=nums[i],此时令subSum=nums[i],
当subSum>0时,subSum+nums[i]>nums[i]
比较:sum = max(sum,subSum)
最后返回sum
代码如下:
class Solution {
public:
int maxSubArray(vector& nums) {
int n=nums.size();
if(n==0)
return 0;
int subSum = 0;
int sum = INT_MIN;
for(int i=0; i