博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algorithm4.子数组求和贪心
阅读量:7112 次
发布时间:2019-06-28

本文共 936 字,大约阅读时间需要 3 分钟。

子数组求和最大问题 20131011

问题描述

一个数组中,有整数也有复数,求这个数组的所有子数组中,求和最大的值。

这是一个动态规划问题,乍看上去没有什么简单的方法,把所有的情况列出来就可以了,但是时间复杂度太高了,不是一个很好的算法,必须改变方法。

         我们分解问题,就是b[i] 表示以a[i]结尾的子数组最大的和,那么我们可以动态规划,也可以叫做贪心算法。

         对于b[i] = max( b[i-1] + a[i], a[i]);

         因为对于a[i]结尾的子数组,最大的和有两种情况,一个是他自己,一个是把之前的b[i-1]也加上去。如果b[i-1] > 0 则是选择b[i-1]+a[i] ,反之 选择a[i].

代码:

int getMaxSubArraySum(const int arr[], int &start, int &end , const int length ){

    int b = 0, maxSum = 0;

    int s =0, e= 0;

   

    for( int  i = 0 ; i < length ; ++i){

        if(b > 0 ){

            b += arr[i];

            e = i;

        }else{

            b = arr[i];

            s = i;

            e = i;

        }

 

        if(maxSum < b){

            start = s;

            end = e;

            maxSum = b;

        }

    }

    return maxSum;

}

 

int main()

{

    int a[] = {1,-2,3,10,-4,7,2,-5};

    int start = 0;

    int end = 0;

    cout << "max sum is " << getMaxSubArraySum(a,start,end,sizeof(a)/sizeof(int)) << endl;

    cout << "start:" << start << endl;

    cout << "end  :" << end << endl;

    return 0;

}

 

追梦的飞飞

于广州中山大学 20131011

HomePage: 

转载于:https://www.cnblogs.com/hbhzsysutengfei/p/3438985.html

你可能感兴趣的文章
C++/Php/Python 语言执行shell命令
查看>>
Oracle表空间维护总结
查看>>
12C -- ORA-01017
查看>>
约瑟夫环问题
查看>>
Compile、Make和Build的区别(as make, build, clean, run)
查看>>
介绍三款串口监控工具:Device Monitoring Studio,portmon,Comspy
查看>>
Bulk Load-HBase数据导入最佳实践
查看>>
sqlServer的主键只能自增不能手动增加
查看>>
maven常用命令介绍
查看>>
【树莓派】树莓派上刷android系统
查看>>
J2EE之Servlet初见
查看>>
elasticsearch best_fields most_fields cross_fields从内在实现看区别——本质就是前两者是以field为中心,后者是词条为中心...
查看>>
JPA(一):简介
查看>>
git 的安装和使用
查看>>
window系统使用tftp下载和上传文件
查看>>
cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储
查看>>
《AndroidStudio每日一贴》3.高速切换代码风格、配色方案和键盘
查看>>
Resolving Problems installing the Java JCE Unlimited Strength Jurisdiction Policy Files package--转
查看>>
Ajax-ajax实例1-动态加载的 FAQ
查看>>
破解电信光猫华为HG8120C关闭路由功能方法
查看>>