连续子数组的最大和

题目

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。(题目来自剑指Offer)

示例

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]

输出:6

解释:连续子数组 [4,-1,2,1] 的和最大,为 6。

解法

动态规划

/**
 * @desc 连续子数组的最大和
 * @param {number[]} nums
 * @return {number}
 */
let maxSubArray = (nums) => {
  let res = nums[0];
  for (let i = 1; i < nums.length; i++) {
    // 对nums进行状态转移,如果nums[i-1]>0,则说明它对会让nums[i]的值更大
    nums[i] += nums[i - 1] > 0 ? nums[i - 1] : 0;
    res = Math.max(res, nums[i]);
  }
  return res;
};

评论(0)

评论