深度优先

这个家伙好懒,除了文章什么都没留下

0%

【算法】子串和

描述

给定一整型数列{a1,a2…,an},找出连续非空子串{ax,ax+1,…,ay},使得该子序列的和最大,其中,1<=x<=y<=n。

输入

第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)

输出

对于每组测试数据输出和最大的连续子串的和。

样例输入

1
2
3
4
1
5
1 2 -1 3 -2

样例输出

1
5

提示

输入数据很多,推荐使用scanf进行输入

题目不难,但是有一定意义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.Scanner;

public class 子串和 {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int N=sc.nextInt();
int[] data=new int[N];

for (int i = 0; i < N; i++) {

int n=sc.nextInt();

int max=sc.nextInt();

int sum=max;
n--;
while(n-->0)
{
int num=sc.nextInt();

if(sum>0)
sum += num;
else
sum = num;

if(sum>max)
max = sum;
}
data[i]=max;
}

for (int i = 0; i < N; i++) {
System.out.println(data[i]);
}
}
sc.close();
}
}