Given an integer array
nums
, find a contiguous non-empty subarray within the array that has the largest product, and return the product.The test cases are generated so that the answer will fit in a 32-bit integer.
A subarray is a contiguous subsequence of the array.
Example 1:
Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
Constraints:
`1 <= nums.length <= 2 104
*
-10 <= nums[i] <= 10* The product of any prefix or suffix of
nums` is guaranteed to fit in a 32-bit integer.题目大意:
求子数组最大积
解题思路:
类似于LeetCode 053 Maximum Subarray求子数组最大和,用DP。
递归式; dp为以某个数为结尾的最大子数组积,dp2为以某个数为结尾的最小子数组积1
2dp[i] = max(num[i], dp[i-1] * num[i], dp2[i-1] * num[i])
dp2[i] = min(num[i], dp[i-1] * num[i], dp2[i-1] * num[i])
解题步骤:
N/A
注意事项:
- 由于负负得正,所以是多状态DP。需要同时赋值
Python代码:
1 | # dp[i] = max(num[i], dp[i-1] * num[i], dp2[i-1] * num[i]) |
算法分析:
时间复杂度为O(n)
,空间复杂度O(1)