连续子数组的最大和Java实现

问题描述:

  一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

  本文采用的是数组,利用等差数列进行求和,代码如下:

package series00;

import java.util.Arrays;
import java.util.Scanner;

public class series1 {

public static void main(String[] args) {
//准备数据
System.out.println("请输入个数N:");
Scanner sc1=new Scanner(System.in);
int N=sc1.nextInt();
System.out.println("请输数列:");
int[] a=new int[N];
for (int i = 0; i < a.length; i++) {
Scanner sc2=new Scanner(System.in);
a[i]=sc2.nextInt();
}
int count=0;
int m=0;
int[] sum=new int[N-2];
for (int i = 0; i < a.length-2; i++) {
//判断是否连续
if (((a[i]-a[i+1]==-1&&a[i+1]-a[i+2]==-1))
||((a[i]-a[i+1]==1)&&a[i+1]-a[i+2]==1)){
count++;
}else if(count!=0) {
//等差数列求和
if (count%2==0) {
sum[m]=((count+2)/2)*(a[i-count]+a[i+1]);
}else {
sum[m]=(count+2)*(a[i-1]);
}
count=0;
m++;
}else {
count=0;
}
if ((i==a.length-3)&&(count!=0)) {
if (count%2==0) {
sum[m]=((count+2)/2)*(a[i-count]+a[i+1]);
}else {
sum[m]=(count+2)*(a[i-1]);
}
}

}

System.out.println(Arrays.toString(sum));
Arrays.sort(sum);
System.out.println("连续子数组的最大和为:"+sum[N-3]);
}

}
进行测试:

请输入个数N:
20
请输数列:
1
2
3
4
5
6
5
4
3
2
3
4
5
6
7
6
5
4
3
2

结果:

[21, 20, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
最大连续和为:27
 
---------------------

猜你喜欢

转载自www.cnblogs.com/hyhy904/p/11257588.html
今日推荐