作者:珠海南驰焊接检测工程有限公司 | 来源:互联网 | 2023-10-10 17:44
问题:输入一个整数数组,既有正数,又有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
输入:数组vector array
输出:和最大值 int
思路:贪心,从前向后遍历数组,当子数组和小于0时,抛弃掉前面的子数组。同时,设置maxSum保存子数组的和的最大值。
动态规划,f(i)表示以i结尾的子数组的和的最大值,递归公式如下:
代码:
class Solution {
public:bool isInvalidInput=false;int FindGreatestSumOfSubArray(vector array) {int len=array.size();if(len==0){isInvalidInput=true;return 0;}int sum=0;int maxSum=INT_MIN;for(int i=0;imaxSum)maxSum=sum;}return maxSum;}
};
复杂度分析:时间复杂度为O(n),空间复杂度为O(1).