剣指offer(python)動的計画——55.連続サブ配列の最大和
1029 ワード
55.(簡単)——動的計画
空でない配列を入力します.配列の数は正でも負でもあります.
配列内の1つまたは複数の整数がサブ配列を構成します.
すべてのサブ配列の和の最大値を求めます.
要求時間複雑度はO(n)である.
サンプル
問題解決の考え方:
どうてきけいかくもんだい
状態:dp[i]現在iで終わる連続配列の最大値を記録する
(1)dp[i]=dp[i-1]+nums[i]がnum[i]より小さい場合は、dp[i]は連続配列の最大値ではなく、別のかまど、dp[i]=nums[i]であり、状態を[i]から再開し、この状態を記録する
(2)dp[i]=dp[i-1]+nums[i]がnum[i]より小さい場合はdp[i]が連続配列の最大値となり、この状態を記録する
(3)配列が空である場合や1である場合など,特殊な状況を考える.
参照コード:
空でない配列を入力します.配列の数は正でも負でもあります.
配列内の1つまたは複数の整数がサブ配列を構成します.
すべてのサブ配列の和の最大値を求めます.
要求時間複雑度はO(n)である.
サンプル
:[1, -2, 3, 10, -4, 7, 2, -5]
:18
問題解決の考え方:
どうてきけいかくもんだい
状態:dp[i]現在iで終わる連続配列の最大値を記録する
(1)dp[i]=dp[i-1]+nums[i]がnum[i]より小さい場合は、dp[i]は連続配列の最大値ではなく、別のかまど、dp[i]=nums[i]であり、状態を[i]から再開し、この状態を記録する
(2)dp[i]=dp[i-1]+nums[i]がnum[i]より小さい場合はdp[i]が連続配列の最大値となり、この状態を記録する
(3)配列が空である場合や1である場合など,特殊な状況を考える.
参照コード:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
size = len(nums)
dp = [False for _ in range(size)]# : i
if size==0 :# 1
return None
if size==1: # 2
return nums[0]
dp[0] =nums[0]
#
for i in range(1,size):
dp[i] = max(dp[i-1]+nums[i],nums[i])#
return max(dp)