题目:
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
.
解答:一开始想到了最常规的分治法,但是中间段的最大子集考虑出了点问题。没有想到这个可以用DP来解
思路如下:
- class Solution {
- public:
- int maxSubArray(int A[], int n) {
- if (n == 0)
- return 0;
- int max_ending_here = A[0];
- int max_so_far = A[0];
- for(int i = 1; i < n; ++i)
- {
- if (max_ending_here < 0)
- // So far we get negative values, this part has to be dropped
- max_ending_here = A[i];
- else
- // we can accept it, it could grow later
- max_ending_here += A[i];
- max_so_far = max(max_so_far, max_ending_here);
- }
- return max_so_far;
- }
- };