问题:
在一个数组中找出和最大的连续几个数。(至少包含一个数)
例如:
数组A[] = [−2, 1, −3, 4, −1, 2, 1, −5, 4],则连续的子序列[4,−1,2,1]有最大的和6.
输入格式
第一行输入一个不超过1000的整数n。
第二行输入n个整数A[i]。
输出格式
第一行输出一个整数,表示最大的和。
样例输入
3 1 1 -2
样例输出
2
提示:动态规划思想
代码:
import java.util.Scanner;
public class MaxSumOfSequence {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int num=in.nextInt();
int []a=new int[num];
int []temp=new int[num];//保存最大值
for(int i=0;i<num;i++) {
a[i]=in.nextInt();
temp[i]=a[i];//默认为元素本身
}
for(int i=1;i<num;i++) {
if(temp[i-1]>0) {//动态规划思想,只有前面的和不小于0,加上前面的值一定是变大的过程
temp[i]+=temp[i-1];
}
}
//找出最大值即可
int max=temp[0];
for(int i=0;i<num;i++) {
if(temp[i]>max)
max=temp[i];
}
System.out.println(max);
}
}
很匆忙的写的,感觉这个题不难,就是经常出现,可以当熟悉动态规划的例子。。。。。
扩展:就是要求你输出最大子序列。。。
提示:像求最大和一样,加一个StringBuffer数组,然后和求最大和一起同时添加即可。。