采用最大子段和的改进算法,遍历数组,并记录开头和结尾。
#include<iostream> using namespace std; int main() { int sum=0,a[10],max=0,i=0,j,first,last; cout<<"请输入10个数:"<<endl; for(int b=0;b<10;b++) { cin>>a[b]; } for(i=0;i<10;i++) { for(j=i;j<10;j++) { if(a[j+1]>a[j]) { sum+=1; } else { sum=0; } if(sum>max) { max=sum; first=j+1-max; last=j+1; } } } cout<<"单调递增子序列长为:"<<max+1<<endl; cout<<"起始:"<<first<<"终止:"<<last<<endl; //数组序列从0开始 }
算法运用动态规划的思想改进后由O(n^2)变为O(n)(最优子结构,子问题重叠)
#include<iostream> using namespace std; int main() { int sequence(int *a); int a[10],h; cout<<

本文介绍了一种改进的最大子段和算法,通过动态规划思想将复杂度从O(n^2)降低到O(n),并提供了详细的代码实现,用于寻找数组中最大递增子序列的长度及其位置。

最低0.47元/天 解锁文章
2264





