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