///动态规划 dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);挺简单的,下面这个,就是直接输出最大值,但是没有记录下具体数字序列是多少
public class Leecode51 {
public static void main(String[] args) {
int a[]={-2,11,-4,13,-5,-2};
System.out.println(maxSubArray(a));
//output:20
}
static int maxSubArray(int[] nums) {
int len=nums.length;
int [] dp=new int[len];
dp[0]=nums[0];
for (int i = 1; i < len; i++) {
dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
}
int max=Integer.MIN_VALUE;
for (int i = 0; i <len ; i++) {
max=Math.max(max,dp[i]);
}
return max;
}
}
public class Leecode51 {
public static void main(String[] args) {
int a[]={-2,11,-4,13,-5,-2};
System.out.println(maxSubArray(a));
}
static int maxSubArray(int[] nums) {
int len=nums.length;
int [][] dp=new int[len][len];
int start,end;
start=0;
end=0;
int max=Integer.MIN_VALUE;
dp[0][0]=nums[0];
for (int j = 1; j<len; j++)
for (int i = 0; i<j; i++) {//思考这个下标开始的地方。
dp[i][j]=Math.max(dp[i][j-1]+nums[j],nums[j]);
if(dp[i][j]>max)
{
start=i;
end=j;
max=dp[i][j];
}
}
System.out.println("start"+start);
System.out.println("end"+end);
return max;
}
}