码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer(30)连续子数组的最大值

时间:2018-04-07 11:22:31      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:color   return   开始   数字   结果   sum   计算机   模式识别   计算机专业   

题目描述

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)

 

题目分析

这题我们可以分析数组,一个一个的找规律。不过如果知道动态规划的话,很容易发现后面的结果跟前面的有关系。如果用函数sum(i)表示以第i个数字结尾的子数组的最大和,那么我们只需要求出

max[sum(i)],其中可以用如下递归公式。

当i=0时,或者sum(i-1)<=0时,sum(i)=array[i];

当i≠0时,或者sum(i-1)>0时,sum(i)=sum(i-1)+array[i];

那么就可以写代码了

 

代码

function FindGreatestSumOfSubArray(array)
{
    if(array.length<=0) return 0;
    let sum=array[0],max=array[0];
    for(let i=1;i<array.length;i++){
        if(sum<0) sum=array[i];
        else sum=sum+array[i];
        if(sum>max) max=sum;
    }
    return max;
}

 

剑指offer(30)连续子数组的最大值

标签:color   return   开始   数字   结果   sum   计算机   模式识别   计算机专业   

原文地址:https://www.cnblogs.com/wuguanglin/p/FindGreatestSumOfSubArray.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!