#include <IOSTREAM>
using namespace std;
//************************************
// Method: maxProduct
// FullName: maxProduct
// Access: public
// Returns: int 最大子段积
// 功能:求数组A[0:n-1]的最大子段积
// Parameter: int A[]
// Parameter: int n
//************************************
int maxProduct(int A[], int n)
{
if (!A)
return 0;
int *b = new int[n]; //b[i]表示以A[i]结尾的子段最大积
b[0] = A[0];
int *c = new int[n]; //c[i]表示以A[i]结尾的子段最小积
c[0] = A[0];
int product = A[0];
for (int i=1; i< n; i++)
{
//对于A[i]的正负两种情况下,计算最大积和最小积的方法是不同的。
if (A[i] >= 0)
{
//计算子段最大积
if (b[i-1] * A[i] > A[i] )
b[i] = b[i-1] * A[i];
else
b[i] = A[i] ;
//计算子段最小积
if (c[i-1]*A[i] < A[i])
c[i] = c[i-1]*A[i];
else
c[i] = A[i];
}
else
{
//计算子段最大积
if (c[i-1] * A[i] > A[i])
b[i] = c[i-1] * A[i];
else
b[i] = A[i];
//计算子段最小积
if (b[i-1] * A[i] < A[i])
c[i] = b[i-1] * A[i];
else
c[i] = A[i];
}
//求大的积
if (b[i] > product)
product = b[i];
}
delete []b;
delete []c;
return product;
}
int main()
{
int arr[3] = {-4, -3, -2};
cout << maxProduct(arr, sizeof(arr)/sizeof(int)) << endl;
return 0;
}
最大子段积
最新推荐文章于 2022-09-12 20:01:37 发布