Java编程—求子数组最大和(java)
题目:
【问题描述】给定一个数组,求数组中某一段元素和的最大值。注意这一段元素是连续的。如[31,-41,59,26,-53,58,97,-93,-23,84],的最大和是187=59+26+(-53)+58+97
【输入形式】第一行输入数组长度N(0<N<=20000)后面N行输入数组元素
【输出形式】输出子数组的最大和
【样例输入】
10
31
-41
59
26
-53
58
97
-93
-23
84
【样例输出】
187
代码样例:
import java.util.Scanner;
class max_Subarray
{
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int a[]=new int[n];//声明数组,存储输入
int max=0,temp=0;//temp为加法器,用于累加;max存储最大数据
for(int i=0;i<n;i++){
a[i]=scan.nextInt();
}
for(int i=0;i<n;i++){
temp=0;
for(int j=i;j<n;j++){
temp+=a[j];
if(temp>max)
max=temp;
}
}//双重for循环,可以计算不同起始点子数组的累加结果
System.out.println(max);
}
}