编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
来源:互联网 发布:模拟人生java破解版 编辑:程序博客网 时间:2024/05/01 21:34
这个算法我在我的博客里使用动态规划做过,具体实现请参阅我的dp板块,下面给出书上最快的算法,时间复杂度为O(n),称之为线性算法。
#include <iostream>using namespace std;int x[10]={31,-41,59,26,-53,58,97,-93,-23,84};int mmax(int a,int b){return a>b?a:b;}int main(){int maxsofar=0,maxendinghere=0;for(int i=0;i<10;i++){maxendinghere=mmax(maxendinghere+x[i],0);maxsofar=mmax(maxsofar,maxendinghere);}cout<<maxsofar<<endl;return 0;}
算法说明:假设我们解决了x[0...i-1]的问题,那么如何扩展为包含x[i]的问题呢?我们使用类似于分治算法的原理:前i个元素中,最大总和子数组要么在前i-1个元素中(我们
将其保存在maxsofar中),要么其结束位置为i(我们将其存贮在maxendinghere中)。
该代码十分简短,也很快。
下面给出一个平方算法:思路很容易理解的:
#include <iostream>using namespace std;int x[10]={31,-41,59,26,-53,58,97,-93,-23,84};int mmax(int a,int b){return a>b?a:b;}int main(){int maxsofar=0;for(int i=0;i<10;i++){int sum=0;for(int j=i;j<10;j++){sum+=x[j];maxsofar=mmax(maxsofar,sum);}}cout<<maxsofar<<endl;return 0;}
- 编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
- 【编程珠玑-读书笔记】算法设计技术—以求解"最大连续子序列和"为例
- 求解最大子序列和问题的线性时间算法
- 编程珠玑第八章——分治算法求解数组中的最大的连续和
- [编程珠玑]-第八章:连续子向量的最大和
- 【扫描算法】求一个向量的元素和最大的连续子向量 --编程珠玑
- 如何求解最大连续子序列的和
- [珠玑之椟]字符串和序列:左移、哈希、最长重复子序列的后缀数组解法、最大连续子序列
- [珠玑之椟]字符串和序列:左移、哈希、最长重复子序列的后缀数组解法、最大连续子序列
- [珠玑之椟]字符串和序列:左移、哈希、最长重复子序列的后缀数组解法、最大连续子序列
- [珠玑之椟]字符串和序列:左移、哈希、最长重复子序列的后缀数组解法、最大连续子序列
- 求解最大连续子数组的算法
- 求最大连续子向量和-编程珠玑
- 算法设计与分析——动态规划方法求解序列的连续最大子段和
- 连续子数组最大和或最大子段和的求解算法及其正确性
- 最大子序列和的线性算法及其它算法
- 最大子序列和的线性算法及其它算法
- 算法笔记1-最大子序列和问题的求解
- Windows上SVN安装配置与使用
- UIImagePickerController详解
- Thread, wait(), notify(), sleep()
- linux中seq命令用法
- 破解Google Gmail的https新思路
- 编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和
- NYOJ 矩形嵌套
- CF 299A Ksusha and Array
- java_IO流的操作
- Java使用memcached
- cocos2d-x屏幕适配原理分析
- 详细描述中断处理流程
- Oracle之DB Link入门
- 男士健身方法