53. *大子序和(JS实现)

1 题目
给定一个整数数组 nums ,找到一个具有*大和的连续子数组(子数组*少包含一个元素),返回其*大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和*大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

2 思路
这道题利用动态规划的方法,假设以i为结尾的子串*大值为f(i),那么状态转移方程f(i+1) = max(f(i) + nums[i+1], nums[i+1])

3代码
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let len = nums.length;
let max = nums[0];
let pre = 0;

for (let i=0;i<len;i++) {
pre = Math.max(pre + nums[i], nums[i]);
max = Math.max(max, pre);
}

return max;
};