求一个浮点数的连续子序列最大乘积 (2013 小米校园招聘笔试题)

给定一个浮点数的序列,F1F2F3,……,Fn(1<=n<=1000),定义Ps,e(1<=s<=e<=n)为子序列Fi(s=<i<=e)的所有元素的乘积。写一个函数,求P的最大值。输入保证对任意se, P不会超过double能表示的数据范围。

比如序列:

-2.5 ,2 ,0, 4 ,0.5 ,10 ,0.1

 1 // 最大的子序列积.cpp : 定义控制台应用程序的入口点。
 2 
 3 #include "stdafx.h"
 4 
 5 double max(double a,double b,double c)
 6 {
 7     double max_v=a;
 8     if(b>a)
 9         max_v=b;
10     if(c>max_v)
11         max_v=c;
12     return max_v;
13 }
14 
15 double min(double a,double b,double c)
16 {
17     double min_v=a;
18     if(b<a)
19         min_v=b;
20     if(c<min_v)
21         min_v=c;
22     return min_v;
23 }
24 
25 double Maxmultiple(int count,double *f)
26 {
27     double *Min=new double[count+1];//Max[i]代表以f[i]结尾的最大连续序列的乘积
28     double *Max=new double[count+1];//Min[i]代表以f[i]结尾的最小连续序列的乘积
29     Min[0]=f[0];
30     Max[0]=f[0];
31     double max_val=Max[0];
32     for(int i=1;i<count;i++)
33     {
34         Max[i]=max(f[i],f[i]*Max[i-1],f[i]*Min[i-1]);
35         Min[i]=min(f[i],f[i]*Max[i-1],f[i]*Min[i-1]);
36         if(Max[i]>max_val)
37             max_val=Max[i];
38     }
39     return max_val;
40     delete [] Max;
41     delete [] Min;
42 }
43 
44 void main()
45 {
46     double maxmul;
47     double a[]={2.5,-2,0,4,0.5,10,0.1};
48     int len=sizeof(a)/sizeof(a[0]);
49     maxmul=Maxmultiple(len,a);
50     printf("maxmul=%f\n",maxmul);
51 }
原文地址:https://www.cnblogs.com/xingele0917/p/2711638.html