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
     
    ---------------------

  • 相关阅读:
    SQL中的选择判断
    Rsync
    LAMP性能优化的一些建议
    Toad9.7与Oracle11g在X86的Win7下的情况
    IIS中IUSR_和IWAM_:计算机名帐户的用户名和密码的用途
    winform编程中的跨线程访问资源(转)
    MSTDC服务的应用及相关错误的解决方案(转载)
    SQL Server 错误代码详解
    poj 1777梅森素数
    hdu 2815 baby_step c可为非素数
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11257588.html
Copyright © 2011-2022 走看看