数组中连续的一部分称为原数组的子数组。比如3、-6、1、2、3、-1、2、-5、1、2,这个数组的的最大子数组就是1、2、3、-1、2。
实现代码如下:
package com.threeTop.www;
/**
* 动态规划法
* @author wjgs
*
*/
public class MaxSumSubArray {
/**
* 动态规划求最大子数组
* @param array
*/
public static void find(int []array)
{
int lastSum=0;
int Maxsum=array[0];
int start=0;
int end=0;
for(int i=0;i<array.length;i++)
{
if(lastSum>0)
{
//累加
lastSum=lastSum+array[i];
}else
{
//如果需要新的起点,则重新赋值start
lastSum=array[i];
start=i;
}
if(Maxsum<lastSum)
{
Maxsum=lastSum;
end=i;
}
}
System.out.println("连加值最大的和为:"+Maxsum);
System.out.println("连加值最大子数组为:");
for(int i=start;i<=end;i++)
{
System.out.print(array[i]);
if(i!=end)
{
System.out.print(",");
}
}
}
public static void main(String[] args)
{
int []array={3,-6,1,2,3,-1,2,-5,1,2};
MaxSumSubArray.find(array);
}
}