Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
Subscribe to see which companies asked this question.
最经典的动态规划了吧?找最长子序列
思路就是:数组sum,sum[i]表示从i开始的最长子序列和
sum[i] = max{num[i], num[i]+sum[i+1]}
坑:有时候是负数,max一开始不能赋值为0!!!见注释代码~
代码:
class Solution {
public:
int max(int a, int b)
{
if (a > b)
return a;
return b;
}
int maxSubArray(vector<int>& nums) {
int size = nums.size();
if(size == 0)
return 0;
if(size == 1)
return nums[0];
int sum[size] = {0};//从i开始最长的子序列和
sum[size-1] = nums[size-1];//赋值最后一项
for(int i = size -2 ; i >= 0 ; i --)
{
sum[i] = max(nums[i] + sum[i+1], nums[i]);
}
int max = sum[0];
//int max = 0;
for (int i = 0 ; i < size ; i ++)
{
if(sum[i] > max)
max = sum[i];
}
return max;
}
};