连续子数组的最大和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实现的主要内容,如果未能解决你的问题,请参考以下文章

编程之法:面试和算法心得(最大连续子数组和)

Java实现O(n)最大连续子序列和

Java实现O(n)最大连续子序列和

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

java 最大尺寸子阵列和等于k(和为k的最长连续子数组)

java---最大连续子数组和(最大子段和)