计蒜客—最大子阵列

最后更新于:2022-04-01 09:41:09

这道题花了很多时间,主要博主比较菜,花了很多时间去看这个动态规划,了解的不够深入,花了点心思写了出来这个程序. 动态规划,就是避免重复的计算,把上一次计算的结果直接拿来用,比如这道题目,如果最大值是负的,那说明整个数组都是负数.如果不是,则输入的第一个数是第一组的最大值,第二个数的判断就是为正还是为负,根据第一个数的正负来判断下一步操作,同样,每输入一个数都是如此判断. ~~~ import java.util.Scanner; /* * 如果最大值为负数,说明里面所有数都是负数,因此只要找到最大的素数即可 * 简单的动态规划的运用,把上一次比较结果存储下来,用于下一次比较 */ public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int num,sum = 0,max = 0,max_; //max为最终的输出结果.sum存储比较的结果 //max_存储全是负数情况的最大值 boolean flag = false; num = input.nextInt(); int a[] = new int[num]; for (int i = 0; i < num; i++) { a[i] = input.nextInt(); sum = sum+a[i]; if(a[i] > 0){//确定是否为全负的数组 flag = true; } if(sum < 0){//动态规划 sum = 0; } if(sum > max){ max = sum; } } if(!flag){ max_ = a[0]; for (int i = 0; i < a.length; i++) { if(a[i] > max_){ max_ = a[i]; } } System.out.println(max_); }else { System.out.println(max); } } } ~~~
';