求连续子数组的最大乘积

很多人肯定都做过求连续子数组的最大和问题,相信大多数人都很容易将代码写出来。

首先采用最简单的暴力法,代码如下:


  int maxProduct(int A[], int n) {
        
       if(1==n)
        return A[0];
        int i,j;
        int sum=A[0];
        int temp;
        for(i=0;isum)
                    sum=temp;
            }
        }
return sum;
}

相对于求连续字数组的最大和问题,最大乘积有一些不同,因为我们都知道,数组中存在正数,负数,零,使得最大乘积可能不是连续的递增。

因为负数乘以负数也能得到正数,并且如果负数的绝对值大于正数,那么得到的最大乘积就要改变。 所以我们需要在运算中需要保存最大的乘积和最小的乘积

我们用 maxtemp  mintemp来保存当前最大最小乘积。

代码如下:

 int  *maxtemp =new int[n];
        int *mintemp=new int[n];
        maxtemp[0]=A[0];
        mintemp[0]=A[0];
        int i;
        int sum=A[0];
        for(i=1;isum)
                sum=max[i];
        }
        delete [] maxtemp;
        delete [] mintemp;
        return sum;
    }




你可能感兴趣的:(算法)