152. Maximum Product Subarray

Medium
自己寫的two pointers對大數據input會TLE, 是O(N2)的time complexity
答案用的其實是動態規劃.
maxProduct和minProduct分別記錄以nums[i]結尾的subArray里乘積最大/最小值.每次更新的時候,要注意正負號帶來的最大值可能變最小、最小值可能變最大這樣的情況,所以要比較三個值的大小.

class Solution {
    public int maxProduct(int[] nums) {
        int maxProduct = 1;
        int minProduct = 1;
        int res = Integer.MIN_VALUE;
        for (int i = 0; i < nums.length; i++){
            int temp = maxProduct;
            //maxProduct/minProduct stores the max/min product of
            //subarray that ends with the current number nums[i]
            maxProduct = Math.max(Math.max(maxProduct*nums[i], minProduct*nums[i]), nums[i]);
            minProduct = Math.min(Math.min(temp*nums[i], minProduct*nums[i]), nums[i]);
            if (maxProduct > res){
                res = maxProduct;
            }
        }
        return res;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容