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
题目要求:
找到一个数组中的连续子数组,使得子数组拥有最大的和,并返回最大和。
例:给定一个数组[-2,1,-3,4,-1,2,1,-5,4],则连续子数组[4,-1,2,1]使得和最大为:6
解题思路:
我们可以定义一个局部和:cursum以及一个全局和:maxsum, 我们将第一个数依次加上后面的,记录局部和的同时更新全局和。
Solution:
第一次:
public class Solution { public int maxSubArray(int[] A) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. int maxsum = A[0]; for(int i=0;i<A.length;i++) { int thissum = 0; for(int j=i;j<A.length;j++) { thissum+=A[j]; if(thissum>maxsum) maxsum = thissum; } } return maxsum; } }但是时间上超了,显然,这是一种笨方法,继续改进:
第二次:
public class Solution { public int maxSubArray(int[] A) { int maxsum=A[0]; int cursum=A[0]; int i; for(i=1;i<A.length;i++) { cursum = cursum<0 ? A[i]:A[i]+cursum; maxsum = maxsum>cursum ? maxsum : cursum; } return maxsum; } }
LeetCode---Maximum Subarray,布布扣,bubuko.com
原文:http://blog.csdn.net/jojozhangju/article/details/20212449