53. 最大子数组和
给你一个整数数组nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
js
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
解题思路
dp[i] = max{nums[i], dp[i−1] + nums[i]}
f(i) 表示以第 i 个数字结尾的连续子数组的最大和 - 如果 f(i - 1) ≤ 0,负增益,则 f(i) = nums[i] - 如果 f(i - 1) > 0,正增益,则 f(i) = f(i - 1) + nums[i] - 最后返回 f(i - 1) 参考答案
ts
function maxSubArray(nums: number[]): number {
let pre = 0;
let ans = nums[0];
for (let i = 0; i < nums.length; ++i) {
pre = Math.max(nums[i], pre + nums[i]);
ans = Math.max(pre, ans);
}
return ans;
}