53. Maximum Subarray-動態規劃/分治
阿新 • • 發佈:2019-01-31
題:
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; } };