按照题目描述所说:要找出总和最大的连续数列,并返回总和。我们不难发现,当插入一个a[i]时,最大的连续数列有两种可能,一种是它自己作为一种连续数列的开头,可以将其这种数记为Qi,第二种是与Qi-1到a[i]形成一段新的最大连续数列,我们可以将这一段数列的总和表示为SUM(Qi-1,a[i])。所以,最大一段连续数列的总和为Max(Qi,SUM(Qi-1,a[i]))。据此,可以写出如下时间复杂度为O(n)的代码。
具体的代码实现:
class Solution {
public int maxSubArray(int[] nums) {
int sum=nums[0];
int max=nums[0];
for(int i=1;i<nums.length;i++)
{
if(sum+nums[i]<=nums[i]) //自身作为最大数列的开头
sum=nums[i];
else
sum=sum+nums[i]; //不是的话,从上一个最大数列的开头进行累加
if(sum>max) //假如大于当前最大总和的话,将max赋值成sum
{
max=sum;
}
}
return max;
}
}
运行结果: