Menu
CoddyTech

Maximum Product Subarray

中等动态规划python iconjava iconcpp iconc iconjs icon+10

将 nums 的一个子数组中的元素相乘,并返回任意子数组能够得到的最大乘积。子数组由连续元素组成,中间没有间隔,并且不能为空,因此即使数组中全是负数,也有答案。可以包含零和负数。

函数

maxProduct(nums: integer-array) → integer
numsinteger-array
要相乘的整数,每个都在 -10 到 10 之间
返回值integer
非空子数组的最大乘积

约束条件

  • 1 ≤ nums.length ≤ 2 × 104
  • -10 ≤ nums[i] ≤ 10
  • 每个子数组的乘积都能放入 32 位有符号整数中。

示例

输入
nums = [2, -5, 3, -2, 0, 4]
输出
60
解释
两个负数相乘会抵消负号:2 × -5 × 3 × -2 = 60。0 把数组分成两部分,另一边的 4 无法超过 60。
challenge icon

进阶

如何在仍然保持 O(n) 时间复杂度和 O(1) 空间复杂度的情况下,同时报告最佳子数组的起始位置和结束位置?

重置代码
def maxProduct(nums):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

nums = [2, -5, 3, -2, 0, 4]

预期输出

60