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.
Example 2:
Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
这题的解法类似于动态规划,与求最大连续子序列的和相似,但是要更复杂,因为存在0和正负数的问题。先不考虑正负,序列中每一个元素都可能作为最大子序列的末尾,那么这个序列的最大值是前一个元素作为末尾的最大子序列乘以当前值。也就是在[2,3,-2,4]中,4为末尾的最大子序列为或者是4,或者是以-2为末尾的最大子序列*4。在加上存在正负项的问题,要记录最大值与最小值两种情况。
class Solution:
def maxProduct(self, nums: List[int]) -> int:
minn=nums[0]
maxn=nums[0]
tmp=nums[0]
ans=nums[0]
for i in range(1,len(nums)):
tmp=maxn*nums[i]
maxn=max(nums[i],max(minn*nums[i],maxn*nums[i]))
minn=min(nums[i],min(tmp,minn*nums[i]))
ans=max(ans,maxn)
return ans