首页 > 代码库 > 最大连续乘积子串
最大连续乘积子串
1 /* 2 A="2,9,-1,3,7,0,8,9,-3",求最大连续乘积子串,有三种方法,方法一:采用动态规划方法,最容易理解,也最容易实现,方法二:同样采用动态规划的 3 思路,但是不用保存两个数组空间。方法三:采用记录最大值,最小值的方法 4 */ 5 6 /* 7 动态规划方法,,两个数组,最大和最小,max[i]以i结尾的序列中最大连续乘积。 8 maxnum[i]=max{maxnum[i-1]*A[i],minnum[i-1]*A[i],A[i]}; 9 minnum[i]=min{maxnum[i-1]*A[i],minnum[i-1]*A[i],A[i]};10 maxnum[0]=minnum[0]=A[0];11 */12 #include <iostream>13 using namespace std;14 #include <string>15 #include <algorithm>16 double maxmultiply(const double * str,int n)17 {18 int size=n;19 if(size==0)20 return 0;21 double * maxnum=new double[size];22 if(maxnum==NULL)23 exit(1);24 double * minnum=new double[size];25 if(minnum==NULL)26 exit(1);27 double result=str[0];28 maxnum[0]=minnum[0]=str[0];29 for(int i=1;i<n;i++)30 {31 maxnum[i]=max(max(maxnum[i-1]*str[i],minnum[i-1]*str[i]),str[i]);32 minnum[i]=min(min(maxnum[i-1]*str[i],minnum[i-1]*str[i]),str[i]);33 if(maxnum[i]>result)34 result=maxnum[i];35 }36 delete[] maxnum;37 delete[] minnum;38 return result;39 }40 41 /*42 采用动态规划的思路,但是采用两个变量保存max序列和min序列。43 */44 double maxmultiply2(const double * A,int n)45 {46 if(A==NULL)47 return 0;48 double result=A[0];49 double maxnum=A[0],minnum=A[0];50 for(int i=1;i<n;i++)51 {52 double tmpmax=maxnum*A[i];53 double tmpmin=minnum*A[i];54 maxnum=max(max(tmpmax,tmpmin),A[i]);55 minnum=min(min(tmpmax,tmpmin),A[i]);56 if(maxnum>result)57 result=maxnum;58 }59 return result;60 }61 62 //方法三,采用类似观察归纳的方法,maxcurrent,mincurrent ,maxproduct,minproduct ,注意maxcurrent如果小于1要变成1,其实就是好能跟自己比较63 //其实还是一样的,没啥必要写64 double maxmultiply3(const double * A,int n)65 {66 if(A==NULL)67 return 0;68 double maxcurrent=1;69 double mincurrent=1;70 double maxproduct=1;71 double minproduct=1;72 for(int i=0;i<n;i++)73 {74 maxcurrent*=A[i];75 mincurrent*=A[i];76 if(maxcurrent>maxproduct)77 maxproduct=maxcurrent;78 if(mincurrent>maxproduct)79 maxproduct=mincurrent;80 if(maxcurrent<minproduct)81 minproduct=maxcurrent;82 if(mincurrent<minproduct)83 minproduct=mincurrent;84 if(mincurrent>maxcurrent)85 swap(mincurrent,maxcurrent);86 if(maxcurrent<1)87 maxcurrent=1;88 }89 return maxproduct;90 }91 92 int main()93 {94 double A[]={-2.5,4,0,3,0.5,8,-1};95 int n=7;96 cout<<maxmultiply3(A,n)<<endl;97 system("pause");98 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。