题目:
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
.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
分析:
- 采用动态规划思想
计算前n项中最大的和,对于新加如的n+1项,其结果可能有如下情况
n=0:对最大和没有帮助
单独的A[n+1]
以max_subarray(A[n])和A[n+1]以及两者之间的元素组合起来生成的数组。
其中,如果在增长过程中,现有的数组段的和是负数,马上就可以抛弃,因为在这种情况下,max_subarray要是包含这一段,值肯定会比不包括这一段要大。
代码:
public static int maxSubArray(int[] nums) { int intResult = nums[0]; int intCurrentSum = nums[0]; for(int i =1;i<nums.length;i++){ if(intCurrentSum < 0){ intCurrentSum = nums[i]; } else{ intCurrentSum = intCurrentSum + nums[i]; } if(intCurrentSum>intResult ){ intResult = intCurrentSum; } } return intResult; }