10. Maximum Subarray最大子数组

76 阅读1分钟

leetcode.cn/problems/ma…

解题思路

  1. 只有一个值的话,直接返回
  2. 假设最大值是第一个,累加值是否大于零,如果小于零相加会变小直接取下一个值,不取累加值
  3. 累加值与当前假设的最大值进行比较,两者取最大值即可

代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function (nums) {
    if(nums.length === 1) return nums[0]
    let max = nums[0]
    let sumIToJ = nums[0]
    let len = nums.length
    for(let i = 1; i < len; i++) {
        sumIToJ = sumIToJ > 0 ? sumIToJ + nums[i] : nums[i]
        max = sumIToJ > max ? sumIToJ : max
    }
    return max

};