数列最大连续子数组和
来源:互联网 发布:原生js插件写法 编辑:程序博客网 时间:2024/05/29 17:08
一、分治法:
算法复杂度:O(nlgn)
#include <iostream>#include <vector>using namespace std;int A[]={-2,1,-3,4,-1,2,1,-5,4};int CrossSubArray(int A[],int low,int high,int mid){ int left_max=0x80000000; int right_max=0x80000000; int sum=0; for(int i=mid;i>=low;--i) { sum+=A[i]; if(sum>left_max) left_max=sum; } sum=0; for(int i=mid+1;i<=high;++i) { sum+=A[i]; if(sum>right_max) right_max=sum; } return left_max+right_max;}int MaxSubArray(int A[],int low,int high){ if(low==high) return A[low]; int mid=(low+high)/2,L,R,Cr; L=MaxSubArray(A,low,mid); R=MaxSubArray(A,mid+1,high); Cr=CrossSubArray(A,low,high,mid); return max(max(L,R),Cr);}int main(){ int n=sizeof(A)/sizeof(int); cout<<MaxSubArray(A,0,n-1); return 0;}
二、Dp法:
算法复杂度:O(n)
#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int> v={-1,2,-5,3,5,9,-1,22,8};int MaxSubArray(vector<int> v){ int maxsum=v[0],sum=0; for(auto x:v) { sum+=x; maxsum=max(maxsum,sum); sum=max(sum,0); } return maxsum;}int main(){ cout<<MaxSubArray(v); return 0;}
阅读全文
0 0
- 数列最大连续子数组和
- 最大连续子数列和
- 最大连续子数列和
- 最大连续子数列
- 最大连续子数列和问题
- 最大连续子数列和问题
- 最大连续子数列和 模板
- 连续子数组最大和
- 连续最大子数组和
- 连续子数组最大和
- 最大连续子数组和
- 连续子数组最大和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- 最大连续子数组和
- PowerDesigner 15.1 安装步骤详细图解及破解
- [转] 搞ACM的你伤不起 by Roba(附某牛腾讯悲催面试)
- HDU6156 Palindrome Function
- 线程池学习总结
- PHP函数
- 数列最大连续子数组和
- linux开放端口--防火墙iptables
- mysql服务器的安装
- redis在spring中的配置及java代码实现
- (UVA
- Css中的置换元素
- shiro框架认证方法的流程
- 使用sklearn做单机特征工程
- 小白学习Machine Learning in Action-机器学习实战------决策树