leetcod 152. Maximum Product Subarray (medium)

https://leetcode.com/problems/maximum-product-subarray/
題目描述
Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

解題思路
類似53. Maximum Subarray,但是考慮到乘數如果是負數會使得乘積爲負數, 但是最小的負數如果遇到另一個負數乘積可能就變成最大的乘積. 所以除了設置當前最大數maxToCurr外還要設置一個當前最小數, 每次遇到新的乘數就從 (當前最大數*乘數, 當前最小數*乘數, 乘數) 中得到對應的最值.

maxToCurr表示當前位置下能取到的最大乘積結果
minToCurr表示當前位置下能取到的最小乘積結果
product表示最大的乘積結果

代碼
Python

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        if len(nums) == 0:
            return 0
        if len(nums) == 1:
            return nums[0]
        
        maxToCurr = nums[0]
        minToCurr = nums[0]
        product = nums[0]
        
        for i in range(1, len(nums)):
            currMax = max(maxToCurr*nums[i], minToCurr*nums[i], nums[i])
            currMin = min(maxToCurr*nums[i], minToCurr*nums[i], nums[i])
            maxToCurr = currMax
            minToCurr = currMin
            if maxToCurr > product:
                product = maxToCurr
        return product
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章