【leetcode系列】【算法】【中等】乘積最大子數組

題目:

題目鏈接:https://leetcode-cn.com/problems/maximum-product-subarray/

 

解題思路:

動態規劃,狀態轉移公式爲:

dp[i] = max(dp[i - 1] \times nums[i], nums[i])

需要注意的一點是,因爲有負數的存在,所以在每一位需要保存最大和最小的兩個值,用於下一位的計算

 

代碼實現:

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        min_ans = max_ans = ans = nums[0]
        for idx in range(1, len(nums)):
            val_lst = [max_ans * nums[idx], nums[idx], min_ans * nums[idx]]            
            max_ans, min_ans = max(val_lst), min(val_lst)
            ans = max(max_ans, ans)

        return ans

 

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