标签:
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
.
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
if (local_suffix[i - 1] <= 0)
local_suffix[i] = A[i - 1];
else
local_suffix[i] = local_suffix[i - 1] + A[i - 1];
1 int maxSubArray(int A[], int n) 2 { 3 if (n <= 0) 4 return -1; 5 int global_suffix = INT_MIN, *local_suffix = new int[n + 1]; 6 7 local_suffix[0] = 0; 8 for (int i = 1; i <= n; i++) 9 { 10 if (local_suffix[i - 1] <= 0) 11 local_suffix[i] = A[i - 1]; 12 else 13 local_suffix[i] = local_suffix[i - 1] + A[i - 1]; 14 15 if (global_suffix < local_suffix[i]) 16 global_suffix = local_suffix[i]; 17 } 18 19 delete[] local_suffix; 20 return global_suffix; 21 }
However, this uses O(n) memory. We can use just local_suffix instead.
1 int maxSubArray(int A[], int n) 2 { 3 if (n <= 0) 4 return -1; 5 int global_suffix = INT_MIN, local_suffix; 6 7 for (int i = 0; i < n; i++) 8 { 9 if (local_suffix <= 0) 10 local_suffix = A[i]; 11 else 12 local_suffix = local_suffix + A[i]; 13 14 if (global_suffix < local_suffix) 15 global_suffix = local_suffix; 16 } 17 18 return global_suffix; 19 }
标签:
原文地址:http://www.cnblogs.com/ym65536/p/4326614.html