【算法】—— 最大子序列和问题
暴力(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;
}
【算法】—— 最大子序列和问题相关推荐
- 算法题目——子序列和问题(poj-3061)(尺取法)
题目链接:POJ-3061 题意:给定一个序列,使得其和大于或等于S,求最短的子序列长度. 问题分析: 1.首先序列都是正整数,当子序列和大于等于S时,已经没有必要再将右端点继续向右移动.因为再向右移 ...
- 数据结构与算法--分治算法-最大子序列和问题
分治算法 用于设计算法的一种常用技巧–分治算法(divide and conquer).分治算法由两部分组成: 分(divide):递归然后借机较小的问题(基础情况除外) 治(conquer):然后从 ...
- 【每日一算法】最大子序列和
每日一算法-最大子序列和 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] ...
- 逐步优化求解最大子序列和
求解最大子序列和 tag: 数据结构与算法 最大子序列和问题: 给定序列A1, A2,... AN, 求最大的子序列和. 例如 : 对于序列4, -3, 5, -2, -1, 2, 6, -2, 最大 ...
- 剪绳子 算法_[校招-算法题]动态规划
动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...
- 常考面试算法题类型总结(来自知乎)
作者:牛客网 链接:https://www.zhihu.com/question/24964987/answer/200681301 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- go每日新闻(2021-02-25)——悄悄告诉你:很可能Go 1.17就能尝试泛型
每日一谚: Go trusts the programmer to write down what is meant. go中文网每日资讯--2021-02-25 一.Go语言中文网 悄悄告诉你:很可 ...
- 区间K大数查询(求解方法总结)
问题:在一个无序序列中,查找给定区间中的第K大的数 (这是一个很经典的问题,但是之前并没有深究,最近刷题的时候碰到了,就来总结一波--) Method 1:先排序,然后直接找到第K大的数 这种方法最常 ...
- 最长连续子序列nlogn算法
最长上升子序列(LIS)长度的O(nlogn)算法 标签: 算法search优化存储 2012-04-18 19:38 14031人阅读 评论(5) 收藏 举报 分类: 资料学习(15) 解题报告 ...
- 动态规划——最长上升子序列问题 两种角度及优化算法
最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...
最新文章
- mybatis入门篇(四):mybatis动态SQL
- 对产品经理而言,有一种灾难叫“老板说”
- mysql uuid_short 为什么不存在_MySQL内置函数uuid和uuid_short
- Scrapy--1安装和运行
- 设计计算机程序时 要考虑计算的过程,算法和程序设计练习题复习课程(6页)-原创力文档...
- linux上pyenv卸载,在Ubuntu 18.04系统下安装pyenv的方法
- 哲学家问题(java)的三个解法
- python+办公自动化_Python办公自动化之操作excel
- spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
- 菜鸟javascript整理2
- SFTP服务器文件下载
- 企业微信加好友太频繁怎么办?
- python 进化树_SCHISM 构建克隆进化树
- JavaScript中的数组方法总结+详解
- 数据挖掘常用算法整理
- 国际清算银行:多国央行进行CBDC研究 仅少数推出具体计划
- 「开源」快速接入微信微博QQ钉钉登录分享
- 从按下键盘到屏幕上显示字符计算机经过了哪些过程
- 中职学校计算机教学方法初探,基于课堂实效的中职计算机教学初探
- 中科创达旗下Rightware正式发布首个一体化汽车HMI工具链Kanzi One