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;
}
};
時間性能如下圖所示: