[LeetCode] Maximum Subarray 最大子序和

给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。

例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],
连续子序列 [4,-1,2,1] 的和最大,为 6。

扩展练习:
若你已实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

思路:定义两个变量res和curSum,其中res保存最终要返回的结果,即最大的子数组之和,curSum初始值为0,每遍历一个数字num,比较curSum + num和num中的较大值存入curSum,然后再把res和curSum中的较大值存入res,以此类推直到遍历完整个数组,可得到最大子数组的值存在res中。

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let res = -Number.MAX_VALUE, curSum = 0;
    for (let i in nums) {
        curSum = Math.max(curSum + nums[i], nums[i]);
        res = Math.max(res, curSum);
    }
    return res;
};

你可能感兴趣的:(Leetcode)