WEEK#17 Divide and Conquer_Maxim

2017-09-11  本文已影响0人  DarkKnightRedoc

Description of the Problem

Find the contiguous sub-array within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.


Solution1 (Brute Force)

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int MaxInWhole = nums.at(0); // the max value in all the arries;
        for (int i = 0; i < nums.size(); i++) {
            int MaxInPart = nums.at(i); // the max value in arries begin from index i;
                                                    // for each i, set MaxInPart as nums[i];
            int Sum = nums.at(i); // the sum added together begin from index i;
                                            // for each i, set Sum as nums[i];
            for (int j = i + 1; j < nums.size(); j++) {

                Sum += nums.at(j); // accumulate Sum.
                if (Sum > MaxInPart)
                    MaxInPart = Sum; // replace MaxInPart if Sum is larger.
            }
            if (MaxInPart > MaxInWhole)
                MaxInWhole = MaxInPart; // replace MaxInWhole if MaxInPart is larger.
        }
        return MaxInWhole;
    }
};

Time Limit Exceeded!
Leading to using divide and conquer.


Solution2(Divide and Conquer)

can't figure out myself, copied and learnt from https://leetcode.com/problems/maximum-subarray/discuss/

Largest_Sum(nums, i) = Largest_Sum(nums, i-1) > 0 ? Largest_Sum(nums, i-1) : 0 + nums[i];
if (Largest_Sum(nums, i - 1) > 0)
  Largest_Sum(nums, i) = nums[i] + Largest_Sum(nums, i - 1);
else 
  Largest_Sum(nums, i) = nums[i];
上一篇下一篇

猜你喜欢

热点阅读