文章标题
来源:互联网 发布:win10多核优化 2017 编辑:程序博客网 时间:2024/04/29 03:39
求连续区间的最大子序列和
问题
解下面一个事例例如,在一维数组的连续区间中找出其总和最大的连续区间。
例如:input: [-7,4,-3,6,3,-8,3,4]
output: 10
方法
求最大子序列和是一个非常常见的问题,由于本人刚学习算法不久,只用常见的几种方法进行尝试。
穷举法
时间复杂度为O(N.^3)
穷举法,减去一些不必要比较
时间复杂度为O(N.^2)
分治法
时间复杂度为O(NlgN)
代码如下:
#include <iostream>#include <vector>#include <limits>using namespace std;const int MIN = numeric_limits<int>::min();//时间复杂度为O(N.^3)int inefficientMaxSum(vector<int>& A){ int N = A.size(); int ret = MIN; for(int i = 0; i < N; i++) { for(int j=0; j < N; j++) { int sum = 0; for(int k = i; k < j+1; k++) { sum += A[k]; } ret = max(ret,sum); } } return ret;}int betterMaxSum(vector<int>& A){ int N = A.size(),ret = MIN; for(int i = 0;i < N;i++) { int sum = 0; for(int j = i; j<N; j++) { sum +=A[j]; ret = max(ret,sum); } } return ret;}int fastMaxSum(vector<int> &A,int lo, int hi){ if(lo == hi) return A[lo]; int mid = (lo + hi) / 2; int leftSum = MIN, rightSum = MIN, sum = 0; for(int i = lo; i <= mid; i++) { sum += A[i]; leftSum = max(leftSum,sum); } /* for(int i = mid; i>= lo; --i) { sum += A[i]; leftSum = max(leftSum,sum); } */ sum = 0; for(int j = mid+1; j <= hi; j++) { sum += A[j]; rightSum = max(rightSum,sum); } //return max(leftSum,rightSum); int single = max(fastMaxSum(A,lo,mid),fastMaxSum(A,mid+1,hi)); return max(leftSum+rightSum,single);}int main(){ int a[8] = {-7,4,-3,6,3,-8,3,4}; vector<int> A; for(int i=0; i<8; i++) { A.push_back(a[i]); } cout << "max_sum:" << inefficientMaxSum(A)<<endl; cout <<"max_sum2:" << betterMaxSum(A) <<endl; cout <<"max_sum3:" << fastMaxSum(A,0,7) <<endl; cout << "Hello world!" << endl; return 0;}
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 每周学一点 egret(1): wing IDE 使用注意点
- 过滤特殊危险字符
- POJ 3177--Redundant Paths【无向图增加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- HDOJ 1856 More is better (并查集)
- 杭电3790最短路径问题
- 文章标题
- 使用shell定时备份文件
- 理解Linux系统中的load average(图文版)
- 机器学习数据源
- Ajax学习小结
- json_encode处理中文乱码
- TextView加载html文本
- php get_magic_quotes_gpc()函数用法介绍
- 《Java设计模式》之享元模式