Menu
CoddyTech

Maximum Subarray

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

整数のリスト nums が与えられます。部分配列とは、間隔を空けずに隣り合う要素を取り出したもので、少なくとも1つの要素を含む必要があります。nums の部分配列が取り得る最大の合計を返してください。返すのは合計のみで、部分配列自体ではありません。

関数

maxSubArray(nums: integer-array) → integer
numsinteger-array
少なくとも1つの要素を含む整数のリスト
戻り値integer
空でない隣接要素の連続区間の最大合計

制約

  • 1 ≤ nums.length ≤ 105
  • -104 ≤ nums[i] ≤ 104
  • 答えは常に32ビット符号付き整数に収まります。

例

入力
nums = [2, -4, 3, -1, 5, -6, 1]
出力
7
説明
一連の値 [3, -1, 5] の合計は7です。左に伸ばすと-4、続いて2が加わり、差し引きで2の減少になります。右に伸ばすと-6、続いて1が加わり、差し引きで5の減少になります。他の一連の値がこれを上回ることはありません。
challenge icon

発展問題

また、リストを半分に分割し、中央をまたぐ連続部分を処理することで、分割統治法を使って O(n log n) で解くこともできますか?

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

テスト #1

テスト #2

引数

nums = [2, -4, 3, -1, 5, -6, 1]

期待される出力

7