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