1. 程式人生 > >53. Maximum Subarray-動態規劃/分治

53. Maximum Subarray-動態規劃/分治

題:

Find the contiguous subarray 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.

tags:Dynamic Programming / Divide and Conquer

演算法導論上有這題,用分治的方法,O(N*lgN)。

這裡我用dp的方法,時間複雜度為O(n)。

遍歷陣列,累加,當累加的值小於0時,從下一元素開始再從新累加。在這個過程中記錄下最大的累加值就可以了。

看程式碼更容易理解:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max = INT_MIN, prevSum = 0;
        int i, size = nums.size();
        for(i = 0; i < size; ++i){
            prevSum += nums[i];
            if(prevSum>max) max = prevSum;
            if(prevSum<0) prevSum = 0;
        }
        return max;
    }
};