Leetcode—152. 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.

解題思路:

首先想到的就是DP求解,第i位的最小乘積子串可以能是[0,i], [1,i]…… [i-1,i],[i,i]都可能。考慮到nums[i]可正可負,我們這樣吧問題分解:

 1. 若nums[i]>0,f(i) = max(前i-1位的最大值*nums[i],nums[i]);

 2. 若nums[i]<0,f(i) = max(前i-1位的最小值*nums[i],nums[i]);


因此我們是用兩個值,pMax,nMax分別表示當前的最大值與最小值。給出代碼:

int maxProduct(vector<int>& nums) {
    if(nums.size() == 1) return nums[0];
    int pMax = 0, nMax = 0, m = 0;
    for(int i = 0; i<nums.size();i++){
        if(nums[i]<0) swap(pMax, nMax);
        pMax = max(pMax*nums[i], nums[i]);
        nMax = min(nMax*nums[i], nums[i]);
        m = max(m, pMax);  
    }
    return m;
}





發佈了40 篇原創文章 · 獲贊 63 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章