码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-28 09:29:41      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:++   --   int()   输入   string   ext   ann   tin   public   

问题描述:

  一个数组有 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实现

标签:++   --   int()   输入   string   ext   ann   tin   public   

原文地址:https://www.cnblogs.com/hyhy904/p/11257588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!