暴力(O(n2)O(n^2))

int MaxSubseqSum(int A[], int N){int ThisSum, MaxSum, i, j;MaxSum = 0;for (i = 0; i < N; ++i){ThisSum = 0;               // 表示遍历,i表示起始节点,每一次都是新的开始for (j = i; j < N; ++j){ThisSum += A[j];if (ThisSum > MaxSum)MaxSum = ThisSum;}}// 外层循环表示 i 节点开始的最大子序列// 内层循环表示当前节点 i 开始的情况下的最大子序列
}

递归 + 分治(O(nlogn)O(n\log n))

分:二分
治:MAX3()

int MaxSubSum(int A[], int Lft, int Rgt){int MaxLft, MaxRgt, MaxCross;int MaxLftBorder, MaxRgtBorder;int LftBorder, RgtBorder;int Center, i;if (Lft == Rgt){if (A[lft] > 0)return A[lft];return 0;}Center = (Lft + Rgt)/2;MaxLft = MaxSubSum(A, Lft, Center);MaxRgt = MaxSubSum(A, Center + 1, Rgt);MaxLftBorder = 0, LftBorder = 0;for (i = Center; i >= Lft; --i){LftBorder += A[i];if (LftBorder > MaxLftBoder)MaxLftBorder = LftBorder;}MaxRgtBorder = 0, RgtBorder = 0;for (i = Center + 1; i < Rgt; ++i){RgtBorder += A[i];if (RgtBorder > MaxRgtBorder)MaxRgtBorder = RgtBorder;}MaxCross = MaxLftBorder + MaxRgtBorder;return MAX3(MaxLft, MaxRgt, MaxCross);
}#define MAX(a, b) ((a) > (b))?(a):(b)
#define MAX3(a, b, c) MAX(MAX(a, b), c)

时间复杂度为 O(n)O(n) 的算法

int MaxSubseqSum(int A[], int N){int ThisSum, MaxSum, j;ThisSum = MaxSum = 0;for (j = 0; j < N; ++j){ThisSum += A[j];if (ThisSum > MaxSum)MaxSum = ThisSum;else if (ThisSum < 0)ThisSum = 0;}return MaxSum;
}

【算法】—— 最大子序列和问题相关推荐

  1. 算法题目——子序列和问题(poj-3061)(尺取法)

    题目链接:POJ-3061 题意:给定一个序列,使得其和大于或等于S,求最短的子序列长度. 问题分析: 1.首先序列都是正整数,当子序列和大于等于S时,已经没有必要再将右端点继续向右移动.因为再向右移 ...

  2. 数据结构与算法--分治算法-最大子序列和问题

    分治算法 用于设计算法的一种常用技巧–分治算法(divide and conquer).分治算法由两部分组成: 分(divide):递归然后借机较小的问题(基础情况除外) 治(conquer):然后从 ...

  3. 【每日一算法】最大子序列和

    每日一算法-最大子序列和 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] ...

  4. 逐步优化求解最大子序列和

    求解最大子序列和 tag: 数据结构与算法 最大子序列和问题: 给定序列A1, A2,... AN, 求最大的子序列和. 例如 : 对于序列4, -3, 5, -2, -1, 2, 6, -2, 最大 ...

  5. 剪绳子 算法_[校招-算法题]动态规划

    动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...

  6. 常考面试算法题类型总结(来自知乎)

    作者:牛客网 链接:https://www.zhihu.com/question/24964987/answer/200681301 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  7. go每日新闻(2021-02-25)——悄悄告诉你:很可能Go 1.17就能尝试泛型

    每日一谚: Go trusts the programmer to write down what is meant. go中文网每日资讯--2021-02-25 一.Go语言中文网 悄悄告诉你:很可 ...

  8. 区间K大数查询(求解方法总结)

    问题:在一个无序序列中,查找给定区间中的第K大的数 (这是一个很经典的问题,但是之前并没有深究,最近刷题的时候碰到了,就来总结一波--) Method 1:先排序,然后直接找到第K大的数 这种方法最常 ...

  9. 最长连续子序列nlogn算法

    最长上升子序列(LIS)长度的O(nlogn)算法 标签: 算法search优化存储 2012-04-18 19:38 14031人阅读 评论(5) 收藏 举报  分类: 资料学习(15)  解题报告 ...

  10. 动态规划——最长上升子序列问题 两种角度及优化算法

    最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...

最新文章

  1. mybatis入门篇(四):mybatis动态SQL
  2. 对产品经理而言,有一种灾难叫“老板说”
  3. mysql uuid_short 为什么不存在_MySQL内置函数uuid和uuid_short
  4. Scrapy--1安装和运行
  5. 设计计算机程序时 要考虑计算的过程,算法和程序设计练习题复习课程(6页)-原创力文档...
  6. linux上pyenv卸载,在Ubuntu 18.04系统下安装pyenv的方法
  7. 哲学家问题(java)的三个解法
  8. python+办公自动化_Python办公自动化之操作excel
  9. spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
  10. 菜鸟javascript整理2
  11. SFTP服务器文件下载
  12. 企业微信加好友太频繁怎么办?
  13. python 进化树_SCHISM 构建克隆进化树
  14. JavaScript中的数组方法总结+详解
  15. 数据挖掘常用算法整理
  16. 国际清算银行:多国央行进行CBDC研究 仅少数推出具体计划
  17. 「开源」快速接入微信微博QQ钉钉登录分享
  18. 从按下键盘到屏幕上显示字符计算机经过了哪些过程
  19. 中职学校计算机教学方法初探,基于课堂实效的中职计算机教学初探
  20. 中科创达旗下Rightware正式发布首个一体化汽车HMI工具链Kanzi One

热门文章

  1. python: for循环时列表长度改变,会发生什么?
  2. Java设计模式(详细待续)(转)
  3. 【数据结构】单链表基本操作(C++实现)
  4. 华语歌坛年度压轴 王力宏新专辑《心中的日月》
  5. 深入学习卷积神经网络中卷积层和池化层的意义(转)
  6. 远程出发jenkins jobs
  7. CentOS7.6下设置mysql服务开机启动
  8. Eclipse如何从导入SVN上导入项目
  9. Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
  10. tpcc-mysql安装测试与使用生成对比图