leetcode 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
.
这个解法的思路很简单。设两个变量,一个是如果以当前元素为最长子数组的最后一个元素,所能达到的最大值max_ending_here。另一个是已知的最大值max_so_far。
其实是一个动态规划问题。
也就是说,已知一个数组A[n]及其最大子数组max_subarray(A[n]),我们添加一个元素A[n+1]进去。则有三种可能的情况:
1. 添加进去元素的数组A[n+1]不影响A[n]的最大子数组。
2. 单独的A[n+1]
3. 以max_subarray(A[n])和A[n+1]以及两者之间的元素组合起来生成的数组。
其中,如果在增长过程中,现有的数组段的和是负数,马上就可以抛弃,因为在这种情况下,max_subarray要是包含这一段,值肯定会比不包括这一段要大。
代码
int maxSubArray(int A[], int n) { int max = Integer.MIN_VALUE; int sum = Integer.MIN_VALUE; for(int i=0;i<n;i++) { sum = sum<0?A[i]:A[i]+sum; if(sum>max) max=sum; } return max; }