Easy
3394119FavoriteShare
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.
就是一个最大子列和问题,用动态规划的思路解决~
C++:
/*
@Date : 2019-01-17 17:45:06
@Author : 酸饺子 (changzheng300@foxmail.com)
@Link : https://github.com/SourDumplings
@Version : $Id$
*/
/*
https://leetcode.com/problems/maximum-subarray/
*/
class Solution
{
public:
int maxSubArray(vector<int>& nums)
{
int thisSum = 0, maxSum = 0;
bool isFirst = true;
int n = nums.size();
for (int i = 0; i < n; ++i)
{
if (isFirst)
{
maxSum = thisSum = nums[0];
isFirst = false;
}
else
{
if (nums[i] >= maxSum && maxSum < 0)
{
thisSum = maxSum = nums[i];
}
else if (thisSum + nums[i] < 0 && maxSum >= 0)
{
thisSum = 0;
}
else
{
thisSum += nums[i];
if (thisSum > maxSum)
{
maxSum = thisSum;
}
}
}
}
return maxSum;
}
};
Java:
/**
* @Date : 2019-01-17 18:01:55
* @Author : 酸饺子 (changzheng300@foxmail.com)
* @Link : https://github.com/SourDumplings
* @Version : $Id$
*
* https://leetcode.com/problems/maximum-subarray/
*/
class Solution
{
public int maxSubArray(int[] nums)
{
int thisSum = 0, maxSum = 0;
boolean isFirst = true;
int n = nums.length;
for (int i = 0; i != n; ++i)
{
if (isFirst)
{
thisSum = maxSum = nums[0];
isFirst = false;
}
else
{
if (maxSum < 0 && nums[i] > maxSum)
{
maxSum = thisSum = nums[i];
}
else if (nums[i] + thisSum < 0 && maxSum >= 0)
{
thisSum = 0;
}
else
{
thisSum += nums[i];
if (thisSum > maxSum)
{
maxSum = thisSum;
}
}
}
}
return maxSum;
}
}