穷举法是最容易想出的解法,反正就是把所有能举出的子序列都算一遍和,找出最大的一个就是,复杂度O(N*N)。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

对于分治法来说,“分“是比较简单的,对半分成求解左右两个序列的最大子序列,不过终止条件应该是什么呢?我的想法是到只剩一个元素的序列的话,直接返回这个元素就是了,可书上都是如果大于0,返回此元素,若小于0,则返回0,这里想不明白。最难的部分应该是“治”,要考虑跨左右两个子序列的情况。

int MaxSubSeqSum(int a[],int left,int right)
{
    if(left==right)
    {
        return a[left];
    }
    int mid = (left+right)/2;
    int i,lSum=0,rSum=0,tmpLMax=0,tmpRMax=0;
    for(i=mid;i>=left;--i)
    {
        lSum+=a[i];
        if(lSum>tmpLMax)
        {
            tmpLMax = lSum;
        }
    }
    for(i=mid+1;i<=right;++i)
    {
        rSum+=a[i];
        if(rSum>tmpRMax)
        {
            tmpRMax = rSum;
        }
    }
    int overMax = tmpLMax+tmpRMax;
    int lMax = MaxSubSeqSum(a,left,mid);
    int rMax = MaxSubSeqSum(a,mid+1,right);
    return  max(max(overMax,lMax),rMax);
}

动态规划的方法就太巧妙了,巧就巧在它扫描时会跟踪序列上升还是下降的趋势,从而把前面不适合的部分都给抛弃了,就一路走一路抛,并且同时把合适的记忆住了。

int MaxSubSeqSum2(int a[],int len)
{
    int tmpSum=0,maxSum = 0;
    for(int i=0;i<len;++i)
    {
        tmpSum+=a[i];
        if(tmpSum>maxSum)
        {
           maxSum = tmpSum;
        }
        else if(tmpSum<0)
        {
             tmpSum=0;
        }
    }
    return maxSum;
    
}

对“最大子序列和问题”的一点思考相关推荐

  1. mysql 手动写时间_关于数据库中如何存储时间的一点思考

    1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...

  2. 对于表列数据类型选择的一点思考

    对于表列数据类型选择的一点思考 简介 SQL Server每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别.本篇文章对SQL Server表列数据类 ...

  3. 关于STM32驱动DS1302实时时钟的一点思考

    关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...

  4. 对高并发流量控制的一点思考

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

  5. 关于c语言结构体偏移的一点思考

    注:此处只是利用了编译器的特性来计算结构体偏移 这句话就一笔带过,说得有点牵强附会.以后有时间自己再详细了解一下编译器的特性... more exceptional c++ 中文版 26页 https ...

  6. App用户体验的一点思考

    App用户体验的一点思考 最近我在团队中负责TImers4Me这款Android软件的开发.维护和更新,软件每次在市场上的发布都能得到用户一些有价值的反馈,通过收集整理用户们的使用反馈,我们常能看到一 ...

  7. 对高并发流量控制的一点思考 推荐

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

  8. 贝特朗奇论 用计算机,关于贝特朗奇论的一点思考

    关于贝特朗奇论的一点思考 贝特朗奇论这个名字就很奇怪,我最开始以为是贝特朗奇的某个论点或者命题,但是百度了一下发现原来是贝特朗(Bertrand)的"奇论",最初用以批判当时尚不严 ...

  9. 对产品质量的一点思考

    不管是做产品还是做项目,也不管是采用瀑布模型还是敏捷开发,我们都有一个终极目标,就是能按时交付质量可靠的功能,其中质量尤为重要. 本文是我对产品质量的一点思考,如果您所在的团队代码质量很高,很少出BU ...

  10. python多线程队列处理_Python线程和队列使用的一点思考

    Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...

最新文章

  1. php调用C代码的方法详解
  2. jquerymobile在手机上很小_手机充电时按这个键,充电快很多!
  3. 分享Kali Linux 2017年第23周镜像文件
  4. linux中ping命令的用法
  5. Python-基于flask的接口框架
  6. DataScience:风控场景之金融评分卡模型的构建(逻辑回归)开发(转评分卡)、使用过程(线上实现)之详细攻略
  7. C学习if条件判断和for循环
  8. 如何轻松愉快的理解条件随机场(CRF)
  9. redis主从复制和哨兵机制
  10. 可以种树吗_基本农田能干什么?种树?建房?搞种养殖?哪种可以?
  11. 「Font」- 设置 Fallback 字体(如果字体 A 中不存在某个字符,则从字体 B 中加载该字符) @20210212
  12. 使用PYQT5打开海康威视工业相机并获取图像进行显示
  13. Android基础教程(奋斗之小鸟)_PDF 电子书
  14. excel宏实现工作表索引,点击按钮隐藏/显示对应工作表
  15. 素数筛——区间段内最小,最大素数,以及这个区间中素数的个数
  16. MircoPython 的组件扩展方法
  17. 一度智信:拼多多平台推广有哪些
  18. Jupyter notebook中自定义支持天软TSl语言的魔术命令
  19. 网易互娱的一道笔试题
  20. 免费的图片编辑app有哪些?跟你分享这三个软件

热门文章

  1. LOJ#6360. 复燃「恋之埋火」(最小圆覆盖+高斯消元)
  2. tcp 状态转移图详解
  3. nginx配置中文域名解析
  4. MySQL:unknown variable #39;master-host=masterIP#39; [ERROR] Aborting
  5. Qt中图片调用(2)
  6. oracle热点表online rename
  7. 从(社区电商)订购 到 出库 业务流程(个人想法)
  8. xgboost算法_xgboost算法学习心得
  9. python 构建来源gis_Python语言在ArcGIS环境中的应用.pptx
  10. JAVA Runtime.addShutdownHook()方法{拿到线程句柄,在程序关闭之前调用释放资源}