分析:用到动态规划,状态方程式为:
max(dp[i])=getMax(max(dp[i-1]+arr[i],arr[i]))
| 2 | -3 | -2 | 7 | -5 | 1 | 2 | 2 |
dp[i]:以i结尾的数组元素的最大和,如dp[3]时,有两种求法:1)dp[i-1]+arr[i];2)arr[i],求法1得到结果2-3-2+7=4,求法2得到结果就是7,求法二得到结果较大,所以取较大值,dp[3]=7。
取到当前max(dp[i])后再循环向后遍历,拿到每个对应位置的max(dp[i]),同时将相对大的值赋值给结果result,最后输出的result就是连续子集的最大和了。
import java.util.*;
public class Num2{
public static int getMax(int a,int b){
return a>b?a:b;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//数组元素个数
int[] array=new int[n];
for(int i=0;i=max){
max=sum;
}
}
System.out.println(max);
}
}
一样的题型:给定整数序列求连续子串最大和_牛客网 https://www.nowcoder.com/questionTerminal/9d216205fbb44e538f725d9637239523
import java.util.*;
public class Main{
public static int getMax(int a,int b){
return a>b?a:b;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String[] s=sc.nextLine().split(" ");
int[] array=new int[s.length];
for(int i=0;i=max){
//更新结果集
max=sum;
}
}
System.out.println(max);
}
}



