一、题目简述
找到数列中连续子串(至少包含一个数字)中和最大的子串。
例如:给定数列 [−2,1,−3,4,−1,2,1,−5,4] ,连续子串 [4,−1,2,1] 有最大和6。
二、编程思路
对于一个不全为负的数列 {a1a2...an} ,其和最大子串 {ast...aed} 一定具有如下性质:对于任意 st≤k≤ed ,有 ∑ki=stai>0 ,因为如果小于0,其最大子串就是 {ak...aed} 的最大子串,而非 {ast...aed} 。
三、代码设计
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSum,curSum;
curSum=0;
maxSum=nums[0];
for(int i=0;i<nums.size();i++){
curSum+=nums[i];
if(curSum>maxSum){
//若当前和大于最大和,则更新maxSum
maxSum=curSum;
}
if(curSum<=0){
//若子串和小于等于0,则该序列不可能为最长子序列前缀
curSum=0;
}
}
return maxSum;
}
};