zoukankan      html  css  js  c++  java
  • 连续子数组的最大和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
     
    ---------------------

  • 相关阅读:
    Sublime Text 3065
    FBX .NET
    macbook pro的usb串口失效的的处理方法
    CMAKE使用
    Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
    如何在Mac OSX 10.10上安装GDB
    yum安装指定(特定)版本(旧版本)软件包的方法
    MinGW: TOO MANY SECTIONS issue
    轻量级Image Library
    CodeLite的姿势
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11257588.html
Copyright © 2011-2022 走看看