Menu
CoddyTech

Maximum Product Subarray

ふつう動的計画法python iconjava iconcpp iconc iconjs icon+10

nums の部分配列の要素をすべて掛け合わせ、部分配列が取り得る最大の積を返します。部分配列は間を空けずに連続する要素を取り、空になることはないため、負の数だけの配列にも答えがあります。0 と負の値も使用できます。

関数

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つの負の数は打ち消し合います。2 × -5 × 3 × -2 = 60。0が配列を2つに分け、反対側の4は60を上回れません。
challenge icon

発展問題

最適な部分配列の開始位置と終了位置も、O(n) 時間、O(1) 空間で求めるにはどうすればよいでしょうか?

コードをリセット
def maxProduct(nums):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

60