1.题目要求:由一中的链状数组变为环状数组
2.编程思路:
若数组为环状,将其从a[0]出断开,本质和一条链相同,只不过以前只能按顺序从前面往后相加,环状之后能够从尾部加到头部,所以只需要将此数组长度变为2倍,后面一半的数组元素与前面相同,然后即可按照前面所写的链状相同,只需要在while循环中加上一个限定条件:相加最大数组长度小于二分之一数组长度 即可。
3.源程序:
public class Max2 { public static void main(String [] args){ int a[]={2,4,3,-9,9,9,-1}; int b[]=new int[100]; int n=a.length; for(int i=0;i<n;i++){ b[i]=a[i]; b[i+n]=a[i]; } int Max[]=new int[10]; Max[0] = 0; int i = 0;//数组下标 int j = 0;//最大值数组下标 int temp=0;//中间变量 int q=1;//用于连续长度的计数 while(q<a.length&&i<b.length){ if(temp+b[i]>=Max[j]) { temp=temp+b[i]; Max[j]=temp; i++; q++; } else if(temp+b[i]<Max[j]&&temp+b[i]>0) { temp=temp+b[i]; i++; q++; } else if(temp+b[i]<=0) { i++; j++; Max[j]=0; temp=0; q=1; } } int max = Max[0]; for(int k=0;k<=j;k++){ if(Max[k]>max) { max=Max[k]; } } /*System.out.println(j); for(int k=0;k<=j;k++){ System.out.println(Max[k]); }*/ System.out.println("最大子数组和为"+max); } }
4.运行结果截图:
学会改变,举一反三,你就能成为智者!