求首尾相接的数组的最大子数组和

it2022-05-09  29

思路:将一个数组扩大一倍,这样便实现了数组的首尾相接。在将每个数组成的子数组的和全部求出放进sum数组中,最后求出最大值即可。

源代码:

package 首尾相接数组; import java.util.Scanner; public class Main {  public static void main(String args[]) {   /*    * 生成数组    */   System.out.println("请输入数组里数字个数");      Scanner scan = new Scanner(System.in);      int num = scan.nextInt();      int[] array = new int[num*2];      System.out.println("请输入"+num+"个数值,空格间隔");      for(int i = 0;i < num;i++) {       array[i] = scan.nextInt();      }      for(int i = num;i < num*2; i++) {       array[i] = array[i-num];      }      scan.close();      int lon = num*num;      int[] sum = new int[lon];      int changdu = 0;      /*求所有子数组的和   放进sum数组中*/      for(int i = 0;i < num;i++) {       int asum = 0;       for(int j = 0; j < num ;j++) {        asum = asum + array[i+j];        sum[changdu] = asum;        changdu++;       }      }      //输出所有子数组的和的数值      for(int k = 0; k < lon;k ++) {       System.out.print(sum[k]+" ");      }      int max = sum[0];      for(int m = 1; m < lon;m++) {       if(sum[m]>max)             //求sum数组最大的值        max = sum[m];       }      System.out.println(" ");      System.out.println("最大子数组和为:"+max);//输出最大的子数组和  }   }

程序注意细节:因为array【n】数组中每一个数都可以形成n个子数组和,所以定义一个sum【n*n】数组来存放子数组和。

转载于:https://www.cnblogs.com/zjl-0217/p/10589607.html


最新回复(0)