最大连续子序列和:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i+1=j,必有a[i]<a[j],且∑()最大。需要明确的是状态转移方程中的状态代表的含义。因为contiguous,所以dp[i]代表的应该以i位置元素结尾的连续值,并非最大值。
import java.util.Scanner;
public class Main {
public static void main (String args[]){
Scanner in=new Scanner(System.in);
while(in.hasNextLine()){
String s=in.nextLine();//读取当前行
String[] ss=s.split(" ");//split把字符串按照指定的分割 符 空格进行分割,然后返回字符串数组,
int n=ss.length;
int a[]=new int[n];//将字符串写入数组a
for(int i=0;i<n;i++){
a[i]=Integer.parseInt(ss[i]);
}
System.out.print(getMaxSubArray(a));
}
in.close();
}
public static int getMaxSubArray(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int maxEndingHere = 0;
int maxSoFar = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
if (maxEndingHere < 0) {
maxEndingHere = 0;
}
maxEndingHere += nums[i];
maxSoFar = Math.max(maxSoFar, maxEndingHere);
}
return maxSoFar;
}
}