思路
本题为动态规划,动态规划所求目标dp[i]为以元素nums[i]结尾的最大连续子序和;
当dp[i-1]>0时,dp[i]=dp[i-1]+nums[i];
当dp[i-1]$\leq$0时,dp[i]=nums[i];
所以,状态转移方程为:
d
p
[
i
]
=
m
a
x
(
0
,
d
p
[
i
−
1
]
)
+
n
u
m
s
[
i
]
dp[i]=max(0,dp[i-1])+nums[i]
dp[i]=max(0,dp[i−1])+nums[i]
C++
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> sum(nums.size(), 0);
sum[0]=nums[0];
for (int i=1; i<nums.size(); i++){
sum[i]=max(sum[i-1], 0)+nums[i];
}
return *max_element(sum.begin(), sum.end());
}
};
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
sums=[0 for _ in range(len(nums))]
sums[0]=nums[0]
for i in range(1, len(nums)):
sums[i]=max(0, sums[i-1])+nums[i]
return max(sums)