53 Maximum Subarray

求一个数组的最大连续子数组和

时间复杂度O(n)
空间复杂度O(1)

动态规划方法求解:递推公式为DP[i] = DP[i-1] + arr[i], faster than 84%

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    var max = nums[0]
    var cur = 0
    for(var i = 0; i < nums.length; i++){
        cur += nums[i]
        if(cur < 0 || nums[i] > cur) cur = nums[i]
        max = Math.max(cur, max)
    }
    return max
};

更方便理解的递推

递推公式

  • Runtime: 88 ms, faster than 50.81%
  • Memory Usage: 37.4 MB, less than 49.28%
var maxSubArray = function(nums) {
    let len = nums.length
    let cur = 0
    let max = nums[0]
    for(let i = 0; i < len; i++) {
        cur = Math.max(cur + nums[i], nums[i])
        max = Math.max(cur, max)
    }
    return max
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容