【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. 

问题分析:

有数组A[0~~~A[n],现在考虑数组的第一元素和最大的一段数据A[i]-A[j]之间的关系;

1.0=i=j,说明元素A[0]本身构成和最大的一段

2.0=i<j,说明和最大的一段是从0开始

3.0<i<j,说明和最大的一段和0没关系

现在设ALL[i]表示从i到最后一个元素中最大子数组的值;

Start[i]表示:包含从i开始到最后,包含i的最大子数组的值;

根据上述的关系,可以推导出递推关系:

Start[i]=max(A[i],A[i]+start[i+1]);

ALL[i]=max(ALL[i+1],start[i]);

public class Solution {
   public int maxSubArray(int[] A) {
		 if(A==null||A.length==0)
			 return 0;
		 if(A.length==1)
			 return A[0];
		 int len = A.length;
		 int start = A[len-1];
		 int all =  A[len-1];
		 for(int i=len-2;i>=0;i--){
			 start=Math.max(start+A[i], A[i]);
			 all=Math.max(all, start);
		 }
		 return all;
	 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值