考研机试 22.最大序列和
时间:2021/03/05
一.题目描述
给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。 对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
输入描述
第一行为一个正整数N,第二行为N个整数,表示序列中的数。
输出描述
输入可能包括多组数据,对于每一组输入数据, 仅输出一个数,表示最大序列和。
题目链接
二.算法
题解
该题可以通过暴力求解解决,但是时间复杂度比较高。最好通过动态规划的方法求解,动态规划问题最重要的是找到递推关系,该题的递推关系是:a[i]=max(a[i], a[i] + a[i-1])。
重点
动态规划的题目要找到递推关系
代码
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); //读取输入 while(in.hasNext()){ int n = in.nextInt(); int[] numbers = new int[n]; long max = Long.MIN_VALUE; for(int i = 0; i < n; i++){ numbers[i] = in.nextInt(); } //求最大序列和 for(int i = 1; i < n; i++){ numbers[i] = Math.max(numbers[i], numbers[i] + numbers[i - 1]); max = Math.max(numbers[i], max); } max = Math.max(numbers[0], max); System.out.println(max); } } }
努力,向上,自律