求子数组最大的和

在课上的第一个解法,源代码如下:

package CCC;

import java.util.Scanner;

public class One {
public static void main(String[] args)
{
  Scanner sc = new Scanner(System.in);
  int[] a = new int[5];
  int[] max = new int[5];
  max[0] = a[0];
  max[1] = a[0]+a[1];
  max[2] = a[0]+a[1]+a[2];
  max[3] = a[0]+a[1]+a[2]+a[3];
  max[4] = a[0]+a[1]+a[2]+a[3]+a[4];

  System.out.println("输入五个整数");
  for(int i=0;i<=4;i++)
  {
    a[i] = sc.nextInt();
  }
  for(int i=0;i<=4;i++)
  {
    if(a[i]>=max[0]) {
    max[0] = a[i];}
  }
  for(int i=0;i<=3;i++)
  {
    if(a[i]+a[i+1]>=max[1])
    {
      max[1]= a[i]+a[i+1];
    }
  }
  for(int i=0;i<=2;i++)
  {
    if(a[i]+a[i+1]+a[i+2]>=max[2])
    {
      max[2] = a[i]+a[i+1]+a[i+2];
    }
  }
  for(int i=0;i<=1;i++)
  {
    if(a[i]+a[i+1]+a[i+2]+a[i+3]>=max[3])
    {
      max[3] = a[i]+a[i+1]+a[i+2]+a[i+3];
    }
  }
  int x = max[0];
  for(int i=1;i<=4;i++)
  {

    if(max[i]>=x)
    {
      x = max[i];
    }
  }
  System.out.println("最大子数组的和为:");
  System.out.println(x);
  }
}

在课上的第二个解法,源代码如下:

public static void main(String[] args)
{
  Scanner sc = new Scanner(System.in);
  int x;
  System.out.println("请输入数组长度");
  x = sc.nextInt();
  int[] a = new int[x];
  System.out.println("输入整数");
  for(int i=0;i<=x-1;i++)
  {
    a[i] = sc.nextInt();
  }
  int sum = 0 , max = -999;
  for(int i=0;i<a.length;i++)
  {
    sum+= a[i];
    max = (max>sum)?max:sum;
    if(sum<0) sum=0;
  }
  System.out.println("最大子数组的和为:");
  System.out.println(max);
}

 

posted @ 2022-03-13 12:38  一个小弱鸡  阅读(35)  评论(0)    收藏  举报