53,最大子数组的和
题目描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
输入:nums = [1]
输出:1
题解
思路:
动态规划
主要思路:
维护一个和nums数组长度相等的数组,用来记录1-i之间和最大的那个
状态转移就是将nums[i] 和 nums[i] + dp[i - 1]相比较,哪个大就留下那个
代码:
var maxSubArray = function(nums) {
const n = nums.length
// 创建dp数组
const dp = new Array(n).fill(Number.MIN_VALUE)
// 初始化dp数组
dp[0] = nums[0]
let res = dp[0]
// 状态转移
for(let i = 1;i < n;i++){
dp[i] = Math.max(dp[i - 1] + nums[i], nums[i])
res = Math.max(res, dp[i])
}
return res
};