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. 动态规划
根据题意,需要找到数组中的某一个连续子数组,使得改部分的乘积最大,很明显的动规题目。具体实现过程如下:
Note: 其中需要特别注意的是数组中存在负数,因此需要在遍历过程中考虑乘积最小的部分,这样通过符号的翻转反而可以得到最大值。
1 | class Solution: |
降低空间复杂度的情况如下:1
2
3
4
5
6
7
8
9
10
11
12
13class Solution:
def maxProduct(self, nums: List[int]) -> int:
if not nums:
return 0
dp_max, dp_min, result = nums[0], nums[0], nums[0]
for i in range(1, len(nums)):
temp1, temp2 = dp_min * nums[i], dp_max * nums[i]
dp_max = max(temp1, temp2, nums[i])
dp_min = min(temp1, temp2, nums[i])
result = max(dp_max, result)
return result