Leetcode日記_01,乘積最大子序列

題目

乘積最大子序列

給定一個整數數組 nums ,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。

示例 1:python

輸入: [2,3,-2,4]
輸出: 6
解釋: 子數組 [2,3] 有最大乘積 6。
示例 2:數組

輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能爲 2, 由於 [-2,-1] 不是子數組。app

個人解題思路

暴力法

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        max = nums[0]
        for i in range(len(nums)):
            prod = 1
            for j in range(i, len(nums)):
                prod *= nums[j]
                if prod > max:
                    max = prod
        return max

執行代碼 OK經過
咱們再自行測試一遍
先將測試用例改成[-2], OK也沒問題
若是測試用例很是長,那麼該方法確定不可取,由於其時間複雜度爲O(n^2)測試

leetcode上的範例

class Solution:
    def maxProduct(self, nums: list) -> int:
        B = nums[::-1]
        for i in range(1, len(nums)):
            nums[i] *= nums[i - 1] or 1
            B[i] *= B[i - 1] or 1
        return max(max(nums), max(B))

這個方法我有點搞不明白
按理來講 設nums中元素個數爲x,則理論上應該有.net

$$ \sum_{i=1}^x x = \frac{1}{2} x^2 + \frac{1}{2} x $$code

個非空子序列,而上面這個方法中numsB僅列出了x+x=2x個非空子序列blog

動態規劃

狀態定義:
f(x) -------- nums數組中[0, x]範圍內的最大連續子序列的乘積,且該連續子序列以nums[x]結尾
g(x) -------- nums數組中[0, x]範圍內的最小連續子序列的乘積,且該連續子序列以nums[x]結尾
狀態轉移:
(1)當x等於0時,顯然此時[0, x]範圍內只有一個元素,f(0)和g(0)均等於這個惟一的元素。
(2)當x大於0時
a:若是nums[x] >= 0,f(x) = max(f(x - 1) nums[x], nums[x]),g(x) = min(g(x - 1) nums[x], nums[x])
b:若是nums[x] < 0,f(x) = max(g(x - 1) nums[x], nums[x]),g(x) = min(f(x - 1) nums[x], nums[x])
時間複雜度和空間複雜度均爲O(n),其中n是nums數組中的元素個數。
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        maxpd = []
        minpd = []
        for i in range(len(nums)):
            if i == 0:
                maxpd.append(nums[0])
                minpd.append(nums[0])
            else:
                if nums[i] >= 0:
                    maxpd.append(max(maxpd[i-1]*nums[i], nums[i]))
                    minpd.append(min(minpd[i-1]*nums[i], nums[i]))
                else:
                    maxpd.append(max(minpd[i-1]*nums[i], nums[i]))
                    minpd.append(min(maxpd[i-1]*nums[i], nums[i]))
        return max(maxpd)

動態規劃法參考自https://blog.csdn.net/qq_4123...leetcode

相關文章
相關標籤/搜索