问题:输入一个整数数组,既有正数,又有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
输入:数组vector<int> array
输出:和最大值 int
思路:贪心,从前向后遍历数组,当子数组和小于0时,抛弃掉前面的子数组。同时,设置maxSum保存子数组的和的最大值。
动态规划,f(i)表示以i结尾的子数组的和的最大值,递归公式如下:
代码:
class Solution {
public:
bool isInvalidInput=false;
int FindGreatestSumOfSubArray(vector<int> array) {
int len=array.size();
if(len==0)
{
isInvalidInput=true;
return 0;
}
int sum=0;
int maxSum=INT_MIN;
for(int i=0;i<len;++i)
{
if(sum<=0)
{
sum=array[i];
}
else
{
sum+=array[i];
}
if(sum>maxSum)
maxSum=sum;
}
return maxSum;
}
};
复杂度分析:时间复杂度为O(n),空间复杂度为O(1).