LeetCode[Dynamic Programming]: Maximum Product Subarray

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;
    }
};

時間性能如下圖所示:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章