方法一 枚举法,代码如下:
//求子数组的最大乘积
int maxProduct(int *arr,int length){
int max=1,flag=0;
//初始化最大值
for(int i=1;i<length;i++)
max*=arr[i];
//遍历查找乘积最大的
for(int i=1;i<length;i++){
int product=1;
for(int j=0;j<length;j++){
if(i!=j)
product*=arr[j];
}
if(product>max)
max=product,flag=i;
}
printf("%d\n",flag);
return max;
}
方法二 以空间换时间,记录相应的值代码如下:
int maxProduct(int *arr,int length){
int *S=new int[length];
int *T=new int[length];
int *P=new int[length];
S[0]=1,T[length-1]=1;
for(int i=1;i<length;i++)
S[i]=S[i-1]*arr[i-1];
for(int i=length-2;i>=0;i--)
T[i]=T[i+1]*arr[i+1];
for(int i=0;i<length;i++)
P[i]=S[i]*T[i];
int max=P[0],flag=0;
for(int i=1;i<length;i++)
if(P[i]>max)
max=P[i],flag=i;
delete S,delete T,delete P;
printf("%d\n",flag);
return max;
}
方法三 统计正数、负数和零的个数