[Simple Algorithm] 35. Maximum Suborder Sum

topic:

Given an integer array nums, find a contiguous subarray with the largest sum (the subarray contains at least one element), and return its largest sum.

Example:

Input: [ - 2 , 1 ,- 3 , 4 ,- 1 , 2 , 1 ,- 5 , 4 ],
Output: 6 
Explanation: The maximum sum of consecutive subarrays [ 4 ,- 1 , 2 , 1 ] is 6 .
Advanced:

If you have already implemented an O(n) solution, try the more subtle divide-and-conquer solution.

Problem solving ideas:

class Solution {
public:
    int maxSum(vector<int>& nums,int l,int r){
        int mid = (l+r)/2;
        int sum = 0;
        int leftSum = nums[mid];
        int rightSum = 0;
        int res = 0;
        
        if(l == r){
            return nums[mid];
        }
        
        int maxLeft = maxSum(nums,l,mid);
        int maxRight = maxSum(nums,mid+1,r);
        
        /*left max sub array*/
        for(int i = mid;i>=l;--i){
            sum+=nums[i];
            leftSum = max(leftSum,sum);
        }
        
        /*right max sub array*/
        sum = 0;
        for(int i = mid+1;i <= r;++i){
            sum+=nums[i];
            rightSum = max(rightSum,sum);
        }
        
        return max(leftSum+rightSum,max(maxLeft,maxRight));
    }
    
    int maxSubArray(vector<int>& nums) {
        return maxSum(nums,0,nums.size()-1);
    }
};

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325341070&siteId=291194637