首页 > 其他 > 详细

[Algorithm] 53. Maximum Subarray

时间:2019-12-16 00:04:46      阅读:74      评论:0      收藏:0      [点我收藏+]

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

 

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    if (!nums.length) {
        return null;
    }
    
    let start = end = -1;
    let crtDiff = maxDiff = Number.NEGATIVE_INFINITY;
    
    for (let i = 0; i < nums.length; i++) {
        
        crtDiff = Math.max(nums[i], crtDiff + nums[i])
        maxDiff = Math.max(crtDiff, maxDiff);
    }

    return maxDiff;
};

 

To locate the sub array:

var maxSubArray = function(nums) {
    if (!nums.length) {
        return null;
    }
    
    let start = end = -1;
    let crtDiff = maxDiff = Number.NEGATIVE_INFINITY;
    
    for (let i = 0; i < nums.length; i++) {
        
        crtDiff = Math.max(nums[i], crtDiff + nums[i])
        maxDiff = Math.max(crtDiff, maxDiff);
        if (crtDiff === maxDiff) {
            if (nums[i] === crtDiff) {
                start = end = i;
            }
            
            if (maxDiff > nums[i] && start < 0) {
                start = end = i;
            } else if (maxDiff > nums[i] && start >= 0) {
                end = i;
            }
        }
    }
const sub
= nums.slice(start, end + 1) return maxDiff; };
// [ 4, -1, 2, 1 ] sum 6

 

[Algorithm] 53. Maximum Subarray

原文:https://www.cnblogs.com/Answer1215/p/12046404.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!