18.剑指offer-连续子数组的最大和

来源:互联网 发布:淘宝刀具 编辑:程序博客网 时间:2024/06/15 17:44

1.题目

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

2.基本思路

假设数组为num[i],则其定义如下:

num[i]=num[0]num[i1]num[i1]+num[i]i=0num[i1]+num[i]<0num[i1]+num[i]0

num[i]表示:以节点i为尾节点的连续子数组的非负累计和。

整个过程需要一个全部变量保存出现的最大连续子数组和

3.代码

  • c++
int FindGreatestSumOfSubArray(vector<int> array) {    if(array.size()<=0)        return 0;    if(array.size()==1)        return array[0];    int i=0;    int _size=array.size()-1;    int Max=((unsigned int)0-1)>>1;    Max=Max+1;    //cout<<"max="<<Max<<endl;    --_size;    while(i<=_size)    {        if(array[i]<0){            if(Max<array[i])                Max=array[i];            ++i;            continue;        }        int sum=array[i]+array[i+1];        if(0<sum)            array[i+1] =sum;        if( Max<max(array[i],array[i+1]) )            Max=max(array[i],array[i+1]);        ++i;        if(i<_size&& array[i]<0)            ++i;    }    return Max;}
  • python(并无创新,只是纯粹累计代码量)

    class Solution:  def FindGreatestSumOfSubArray(self, array):      # write code here      if len(array)==1: return array[0]      if len(array)==0: return 0      maxValue=-2**31      i=0      _size=len(array)-1;      while i<_size:          if array[i]<0:              maxValue= array[i] if maxValue<array[i] else maxValue              i += 1              continue          sum=array[i]+array[i+1]          array[i+1]= sum if sum>0 else array[i+1]          if maxValue<max(array[i+1],array[i]):              maxValue=max(array[i+1],array[i])          i +=1          if i<_size and array[i]<0:            i=i+1             return maxValue

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 身份证丢了医疗报销怎么办 取公积金身份证丢了怎么办 身份证丢了怎么办就诊卡 人在外地怎么办农村社保卡 武汉医保卡丢了怎么办 济宁社保卡丢了怎么办 农村医疗本丢了怎么办 常熟医保卡丢了怎么办 农民社保卡丢了怎么办 常熟社保卡坏了怎么办 社保卡丢失补办期看病怎么办 社保卡补办期间看病怎么办 医保卡冻结了出院结算怎么办 住院医保卡钱不够怎么办 住院押金条丢了怎么办 急用新社保卡要怎么办 看病没带社保卡怎么办 医保卡掉了住院怎么办 厦门医保卡丢了怎么办 成都医保卡丢了怎么办 长春医保卡丢了怎么办 县城医保卡丢了怎么办 医保卡丢了怎么办南宁 西安职工医保丢了怎么办 重庆医保卡丢了怎么办 外地医保卡丢了怎么办 换单位后医保卡怎么办 单位没交失业金怎么办 沈阳医保卡密码忘了怎么办 西安网约车资格证怎么办 红跑车卡丢了怎么办 苏州住房公积金密码忘了怎么办 公积金查询密码忘记了怎么办 公积金账户密码忘记了怎么办 公积金网上查询密码忘记了怎么办 苏州改公积金密码忘了怎么办 与单位解除劳动合同公积金怎么办 在泰国钱包丢了怎么办 中山车牌网上选号后怎么办 买楼房70年以后怎么办 暂住证过期2个月怎么办