求解最大子序列和问题的线性时间算法
来源:互联网 发布:淘宝网mac版下载 编辑:程序博客网 时间:2024/04/30 10:14
这个问题可以由动态规划的思想求解,MaxSum[i]=max(MaxSum[i-1]+data[i],data[i]),MaxSum[i]记录的是以data[i]为结尾的子序列的最大和。
代码:
#define mem(a) memset(a,0,sizeof(a))#define max(a,b) a>b?a:blong long MaxSum[100005];long long FindMaxmumSubArray(int * data, int size){long long ans=INT_MIN;mem(MaxSum);MaxSum[0] = data[0];for (int i = 1; i < size; i++){MaxSum[i] = max(MaxSum[i - 1] + data[i], data[i]);if (ans < MaxSum[i])ans = MaxSum[i];}return ans;}时间复杂度为O(n)但额外花费了O(n)的空间复杂度。
但我们只是需要一个总的结果我们可以优化掉O(n)的时间复杂度,因为MaxSum[i]在第i+1次迭代之后就用不到了不需要再单独存储
long long FindMaxmumSubArray(int * data, int left, int right){long long ThisSum = 0, MaxSum = 0;for (int i = left; i <= right; i++){ThisSum += data[i];if (ThisSum > MaxSum)MaxSum = ThisSum;else if (ThisSum < 0)ThisSum = 0;}return MaxSum;}
阅读全文
1 0
- 求解最大子序列和问题的线性时间算法
- 最大子序列和的线性时间算法
- 线性时间求解最大子序列和——HDU1003
- 最大子序列和问题的解(线性时间)
- 算法笔记1-最大子序列和问题的求解
- 【数据结构与算法】最大子序列和问题的求解
- 最大子序列和问题的求解
- 最大子序列和问题的求解
- 最大子序列和问题的求解
- 编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
- 最大子序列和的四种求解算法及其时间比较
- 最大子序列和问题的求解(时间复杂度为O(N))
- 最大子序列和的线性时间解法
- 最大子序列和的线性算法及其它算法
- 最大子序列和的线性算法及其它算法
- 最大子序列和问题求解
- 关于求解最大子序列和问题的总结
- java最大子序列和问题的求解
- 斯坦福大学2017年-Spring-最新强化学习(Reinforcement Learning)课程分享
- VMware Workstation 8.0的安装
- 牛客网 剑指offer-二进制中1的个数
- 寒假学习之stm32(15)----DMA(direct memory access)
- 47.Scala多重界定代码实战及其在Spark中的应用源码解析
- 求解最大子序列和问题的线性时间算法
- firewall常用操作示例:
- JMeter插件之 BlazeMeter's XMPP----测试Openfire等
- ElasticSearch的增、删、改、查操作
- 07-端口无法访问的问题
- activeMQ+Spring-mvc结合使用
- 百度OCR api 的python 调用
- Node 简单爬虫
- 互联网程序猿快来看