连续子数组的最大和Java实现
Posted hyhy904
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连续子数组的最大和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
---------------------
以上是关于连续子数组的最大和Java实现的主要内容,如果未能解决你的问题,请参考以下文章