Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
这类型题目适合用动态规划算法来做,由于存在负数的情况,所以不单要记录最大乘积,也要记录最小乘积。C++代码实现如下:
class Solution {
public:
int maxProduct(int A[], int n) {
if (0 == n) return 0;
int maxRes = A[0];
int maxEnd = A[0];
int minEnd = A[0];
for (int i = 1; i < n; ++i) {
int end1 = maxEnd * A[i], end2 = minEnd * A[i];
maxEnd = max(A[i], max(end1, end2));
minEnd = min(A[i], min(end1, end2));
if (maxEnd > maxRes) maxRes = maxEnd;
}
return maxRes;
}
};
时间性能如下图所示:
LeetCode[Dynamic Programming]: Maximum Product Subarray
原文地址:http://blog.csdn.net/chfe007/article/details/44679705