package com.ethjava; import java.util.Scanner; //这是求连续最大子序列和的问题 //实现手法是动态规划,即,如果前面几个数的和如果大于之前的max,就更新max,若sum小于0,则直接不要这些数了,设置sum=0;这是关键之处。 public class maxzixulie { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int num = sc.nextInt(); int[] a = new int[num]; for (int i = 0; i < num; i++) { a[i] = sc.nextInt(); } int max = a[0];//这里必须将max设为a[0],因为会出现所有数都是负数的情况 int sum = 0; for (int i = 0; i < num; i++) { sum = sum + a[i]; if (sum > max) max = sum; if (sum < 0) sum = 0;//若之前的sum为负数,加上就是负担,从0开始算序列和 } System.out.println(max); } } }
求连续最大子序列和的问题
最新推荐文章于 2021-03-27 10:00:56 发布