给定一个整数数组 nums ,从中找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
想法:
- 需要两个变量存储:一、存储从当前已经确定的子序列起始项到分析项的累加值,二、存储当前最大子序和
- 遍历一遍整个数组
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
输入: [10,1,-3,4,-1,2,1,-5,4],
输出: 14
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if(nums.size()==0)return 0;
int sum=nums[0];
int currsum = nums[0]; //存放:从此时sum所表示的最大子序列的起始项累加至正在判断的项 的值
for(int i=1;i<nums.size();i++)
{
if(currsum>=0)currsum+=nums[i]; //只要currsum>0则此时sum所表示的最大公共子序列的起始项不用发生变动
else currsum=nums[i]; //因为此时currsum+nums[i] > nums[i]
sum= currsum>sum? currsum:sum;
}
return sum;
}
};
时间复杂度: O ( n ) O(n) O(n),只遍历一次数组。