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
.
这道题目的关键在于三步:
1.判断cur的sum是不是大于sum再加上A【i】,如果没有,那么由A【i】代替cur……
2.cur是不是大于max(给max设定一个值……)
3.全是负数的情况你的算法是否能跑过……
public class maxiumSubArray {
public static void main(String args[]){
maxiumSubArray ms = new maxiumSubArray();
int[] A={1,-4,3,-2,3,-1,4,-3,3,2};
int[] B={-1,-5,-2,-3,-8,-2,-8,-3};
System.out.println(ms.maxSubArray(B));
}
public int maxSubArray(int[] A){
/*for(int i=1;i<A.length;i++){
* sum[i]=Math.max(A[i],A[i]+sum[i-1]);
* max = Math.max(max,sum[i]);
* }
*/
int max=A[0];
int cur=0;
int flag=0;
for(int i=0;i<A.length;i++){
if(A[i]<0) flag++;
if(A[i]>cur) cur=A[i];
else cur+=A[i];
if(cur>max) max=cur;
}
if(flag==A.length) return 0;
return max;
}
}