题目链接:https://leetcode.com/problems/maximum-subarray/
代码
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
# 为空的时候,不懂得为啥这么设置
if not nums: return -2147483648
# 初始化dp
dp=[0]*len(nums)
#动态规划的方式,当前的值与前一点的结果进行比较
dp[0]=nums[0]
for i in range(1,len(nums)):
if dp[i-1] < 0 and nums[i] >= dp[i-1] :
dp[i] = nums[i]
else :
dp[i]=dp[i-1] + nums[i]
return max(dp)
思路详解
用动态规划的方式
递推公式为:
d
p
[
i
]
=
{
n
u
m
s
[
i
]
,
n
u
m
s
[
i
]
>
d
p
[
i
−
1
]
a
n
d
d
p
[
i
−
1
]
<
0
d
p
[
i
−
1
]
+
n
u
m
s
[
i
]
,
e
l
s
e
dp[i]=\left\{\begin{matrix} nums[i]\ ,& nums[i] > dp[i-1] \ and\ dp[i-1] < 0\\ dp[i-1]+nums[i]\ ,& else \end{matrix}\right.
dp[i]={nums[i] ,dp[i−1]+nums[i] ,nums[i]>dp[i−1] and dp[i−1]<0else
- 如果前一个结果d[i-1] < 0 ,那么,当前值只要大于d[i-1] 即进行替换
- 如果d[i-1] >=0 ,那么,加上当前值一定会比当前值大
- 结构去dp中最大的值即可