题目:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1]
输出:1
示例 3:
输入:nums = [5,4,-1,7,8]
输出:23
解析:
这道题使用Kadane算法来解题。
Kadane算法采用动态规划的思想,其核心在于:
以每个位置为结尾的子数组,最大和是多少?
对于数组中的每个元素,我们面临一个关键选择:
1 从当前元素重新开始一个新的子数组
2 将当前元素加入到前面的最大子数组中
具体代码:
/** * @param {number[]} nums * @return {number} */varmaxSubArray=function(nums){letcurSum=nums[0]letmaxSum=nums[0]for(leti=1;i<nums.length;i++){curSum=Math.max(nums[i],curSum+nums[i])maxSum=Math.max(maxSum,curSum)}returnmaxSum};